2010-03-02 19 views
32

Tengo una aplicación de consola C# (A). Quiero ejecutar otra aplicación de consola (B) desde la aplicación A (de forma síncrona) de forma que B use la misma ventana de comando. Cuando B existe, A debería poder leer el código de salida de B.Ejecutar aplicación de consola desde otra aplicación de consola

¿Cómo hacer eso? Solo necesito este pequeño consejo sobre cómo ejecutar esta otra aplicación en la misma ventana de cmd.

Respuesta

30

Puede usar Process.Start para iniciar la otra aplicación de la consola.

Tendrá que construir el proceso con ProcessStartInfo.RedirectOutput conjunto de true y UseShellExecute conjunto de false con el fin de ser capaz de utilizar la salida de uno mismo.

A continuación, puede leer la salida utilizando StandardOutput.ReadToEnd en el proceso.

+0

En Windows 10, donde cmd es el entorno de compilación de Windows Server 2008, esto ya no funciona, la nueva aplicación abre inmediatamente una nueva ventana. – Georg

9

Puede iniciar otro proceso utilizando la llamada Process.Start(). El examples here muestra cómo leer la salida de otro proceso y espera a que termine.

4

Puede iniciar otro proceso con Process.Start; realmente no importa si se trata de una aplicación de consola o no. Si su aplicación ya se está ejecutando en una ventana de consola, la aplicación recién generada también usará esa ventana de la consola.

var proc = Process.Start("...path to second app"); 
proc.WaitForExit(); 
var exitCode = proc.ExitCode; 

Asegúrese de lista los documentos en la clase de proceso, ya que hay una variedad de pequeños matices que pueden afectar la forma en que se puso en marcha su aplicación secundaria.

0

puede "envolver" la aplicación de consola vieja por la nueva incluyéndolo en sus referencias e iniciar si fuera poco, llamando el método que se llama en el método run de la clase programa

1

yo era capaz de correr el programa 'B' como parte de la misma ventana de comandos llamando a la siguiente configuración:

ConsoleColor color = Console.ForegroundColor; 
ProcessStartInfo startinfo = new ProcessStartInfo(nameProgramB); 
startinfo.CreateNoWindow = false; 
startinfo.UseShellExecute = false; 
Process p = Process.Start(startinfo); 
p.WaitForExit(); 
Console.ForegroundColor = color; 

esta manera, ambos programas se ejecutan seamlesly como si fueran un solo programa. 'nameProgramB' es el nombre para programar 'B'. Espero que esto ayude.

Cuestiones relacionadas