Hay ocasiones en las que es necesario poder lanzar un programa de línea de comandos (o no) de modo silencioso para realizar una tarea y luego recoger de algún modo el resultado de su ejecución. Un caso típico es el envíod e archivos por FTP. FTP.exe es un ejecutable muy útil que viene con Windows y que permite enviar órdenes a un servidor de archivos meidante un archivo de comandos que se le pasa como parámetro.

La siguiente función sirve para ejecutar cualquier programa con su ventana (de haberla) oculta, devolviendo el resultado de la ejecución (normalmente lo que aparecería en la línea de comandos) en una cadena. Si se produce un error se lanza una excepció que recoge los detalles enviados por el programa a la línea de comandos. Puede resultar muy útil. Es necesario incluir System.Diagnostics.

 //Lanza un proceso con su ventana oculta y devuelve el resultado
 private static string lanzaProceso(string Proceso, string Parametros)
 {
  ProcessStartInfo startInfo = new ProcessStartInfo(Proceso, Parametros);
  startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false; //No utiliza RunDLL32 para lanzarlo
  //Redirige las salidas y los errores
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        Process proc = Process.Start(startInfo); //Ejecuta el proceso
        proc.WaitForExit(); // Espera a que termine el proceso
        string error = proc.StandardError.ReadToEnd();
        if (error != null && error != "")    //Error
         throw new Exception("Se ha producido un error al ejecutar el proceso '" + Proceso + "'\n" +
             "Detalles:\n" +
                                 "Error: " + error);
          else    //Éxito
     return proc.StandardOutput.ReadToEnd(); //Devuelve el resultado
 }

La he tenido que usar recientemente en un proyecto y aprovecho la coyuntura para colocarla aquí. ¡Que la disfrutes!

Escrito por un humano, no por una IA