2010-12-13 30 views
13

¿alguien puede decirme cómo generar otra aplicación de consola desde una aplicación de Winforms, pero (A) no mostrar la ventana de la consola en la pantalla y (B) obtener la salida estándar de la ¿solicitud? En este momento tengo algo como lo siguiente:C#: ejecutar el programa de consola externo como oculto

Process SomeProgram = new Process(); 
    SomeProgram.StartInfo.FileName = @"c:\foo.exe"; 
    SomeProgram.StartInfo.Arguments = "bar"; 
    SomeProgram.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    SomeProgram.StartInfo.UseShellExecute = false; 
    SomeProgram.StartInfo.RedirectStandardOutput = true; 
    SomeProgram.Start(); 
    SomeProgram.WaitForExit(); 
    string SomeProgramOutput = SomeProgram.StandardOutput.ReadToEnd(); 

Si fijo RedirectStandardOutput a falso, entonces la aplicación de consola se oculta como se esperaba, pero no puedo obtener el texto de salida estándar. Sin embargo, tan pronto como configuro RedirectStandardOutput como verdadero, la ventana deja de estar oculta, aunque puedo obtener el resultado del programa.

Por lo tanto, sé cómo hacer que la aplicación de la consola se ejecute oculta, y sé cómo obtener la salida del programa, pero ¿cómo puedo hacer para hacer ambas cosas?

Muchos TIA

+0

¿Cuál es el problema con la solución actual? – codymanix

+0

La solución anterior me permite obtener el resultado de la aplicación de la consola, pero la ventana no está oculta. Si elimino el código para obtener la salida estándar, la ventana * IS * está oculta. Quiero que la ventana esté oculta * Y * para obtener la salida estándar. – JamesPD

Respuesta

33

Te estas perdiendo la propiedadCreateNoWindow que tiene que ser ajustado a cierto en su caso.

+0

Ah, muchas gracias Stefan, eso es exactamente lo que estaba buscando. – JamesPD

+4

@JamesPD si la respuesta de Stefan fue la respuesta que resolvió tu problema, puedes recompensarlo y marcarlo como tal aceptando su respuesta: haz clic en la marca vacía a la izquierda de su respuesta. –

0

creo que le ayudará a:

System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); 
pProcess.StartInfo.FileName = @"C:\Users\Vitor\ConsoleApplication1.exe"; 
pProcess.StartInfo.Arguments = "olaa"; //argument 
pProcess.StartInfo.UseShellExecute = false; 
pProcess.StartInfo.RedirectStandardOutput = true; 
pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
pProcess.StartInfo.CreateNoWindow = true; //not diplay a windows 
pProcess.Start(); 
string output = pProcess.StandardOutput.ReadToEnd(); //The output result 
pProcess.WaitForExit(); 
Cuestiones relacionadas