Ejecutar un proceso de consola desde una UI en C#
Tiempo de lectura: 1 minutos
Ejecutar procesos desde una UI con control de la ejecución y de forma integrada.
Procesos
Desde una aplicación desktop creada en C# nos puede interesar ejecutar un proceso que requiere de la línea de comandos, por ejemplo un programa en Python y recoger la salida para mostrarla directamente al usuario de la app Desktop. De esta manera es como tener un gestor de comandos y simplificar el uso de la consola.
En este ejemplo vamos a ejecutar el programa Sherlock desde una app en C# y recogeremos el resultado en una caja de texto.
Empezamos por crear una función para preparar el script a ejecutar
string script = MountCommand('targetusername');
private string MountCommand(string searchUser) {
return "py sherlock.py --print-found " + searchUser;
} También crearemos otra función para la ejecución. Empezamos por crear un proceso:
Process pp = new Process(); Al cual le aplicaremos las siguientes propiedades
pp.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pp.StartInfo.UseShellExecute = false;
pp.EnableRaisingEvents = false;
pp.StartInfo.RedirectStandardOutput = true;
Ejecutaremos una sesión de consola con el script que hemos preparado
pp.StartInfo.FileName = "cmd.e x e";
pp.StartInfo.Arguments = "/c " + script;
E iniciaremos el proceso
pp.Start(); Desviamos la salida estándard para capturarla
string output = pp.StandardOutput.ReadToEnd(); Y esperamos a que finalice para ver el estado devuelto
pp.WaitForExit();
int ExitCode = pp.ExitCode;
tbOutput.Text = "ExitCode: "
+ ExitCode.ToString()
+ Environment.NewLine; Cerramos el proceso y visualizamos la salida capturada
pp.Close();
tbOutput.Text += output; El código completo quedaría así:
string script = MountCommand('targetusername');
RunScript(script);
private string MountCommand(string searchUser) {
return "py sherlock.py --print-found " + searchUser;
}
private void RunScript(string script) {
Process pp = new Process();
pp.StartInfo.WindowStyle =
ProcessWindowStyle.Hidden;
pp.StartInfo.UseShellExecute = false;
pp.EnableRaisingEvents = false;
pp.StartInfo.RedirectStandardOutput = true;
pp.StartInfo.FileName = "cmd.e x e";
pp.StartInfo.Arguments = "/c " + script;
pp.Start();
string output = pp.StandardOutput.ReadToEnd();
pp.WaitForExit();
int ExitCode = pp.ExitCode;
tbOutput.Text = "ExitCode: "
+ ExitCode.ToString()
+ Environment.NewLine;
pp.Close();
tbOutput.Text += output;
} Y el resultado de la ejecución del proceso capturado en la app
Sugerencia
Podemos parsear el resultado para mostrarlo de una forma más amigable al usuario, separando la red social y el usuario, por ejemplo.
