Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Ejecutar un proceso de consola desde una UI en C#
Source Code

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

Ejemplo 

Sugerencia

Podemos parsear el resultado para mostrarlo de una forma más amigable al usuario, separando la red social y el usuario, por ejemplo.

Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post