En el Framework de .Net tenemos el namespace System.Diagnostics, el mismo contiene las clases necesarias para el manejo de procesos. Mientras la probaba, me surgió un problema, podía lanzar procesos pero no sabía como leer lo que devolvían, en caso de que fueran comandos bash. La verdad es que estuve lanzando código sin poder encontrar solución, pero gracias a las páginas de ayuda de MSDN y a la lista de mono-hispano, en particular de Joil, puede resolver el misterio. Veamos como funciona crear y lanzar procesos en C#, en Gnu/Linux con Mono:
Lo primero es, para acceder a las clases comodamente, que declaremos que vamos a usar el System.Diagnostics, así no tenemos que escribirla cada vez que queramos crear un proceso:
using System.Diagnostics;
La idea para ejecutar un programa externo es crear un objeto Process. Esta clase tiene el constructor vacío:
Process miProceso = new Process();
Luego creamos una instancia de la clase ProcessStartInfo, que contiene la información en sí de que programa quiero ejecutar. En este caso en uno de los constructores le puedes pasar el nombre del comando:
ProcessStartInfo infProceso = new ProcessStartInfo(“uname”);
infProceso.Arguments = “-r”;
Lo que queremos es ejecutar uname -r, el cual si lo escribimos en una terminal nos devuelve la versión del kernel que estemos usando. Ahora bien, para poder guardar la salida de este comando nos hace falta arreglar un par de detalles antes:
infProceso.UseShellExecute = false;
infProceso.RedirectStandardOutput = true;
Y es aquí donde está la magia, cuando cambiamos estas propiedades podemos redirigir la salida del programa. El primer paso es importante, si no se cambia a false la propiedad UseShellExecute, nos da una excepción.
Con los ajustes hechos ya podemos ejecutar el comando. Lo hacemos a con:
miProceso.StartInfo = infProceso;
miProceso.Start();
Entonces ya no nos queda más guardar la información devuelta en string:
string salida = miProceso.StandardOutput.ReadToEnd();
He tomado como ejemplo al comando uname pero puede usarse cualquier otro. Tambien pueden descargar el código y el .exe .
No Comments Yet