2009-01-12 11 views
9

Quiero ejecutar una aplicación de consola que generará un archivo.¿Cómo se oculta una interfaz de usuario de la aplicación de consola cuando se usa Process.Start?

Process barProcess = Process.Start("bar.exe", @"C:\foo.txt"); 

Cuando esto se ejecuta la ventana de consola aparece:

que el siguiente código de usuario. Quiero ocultar la ventana de la consola para que el usuario no la vea.

¿Esto es posible? Está utilizando Process.Start la mejor manera de iniciar otra aplicación de consola?

Respuesta

14
 Process p = new Process(); 
     StreamReader sr; 
     StreamReader se; 
     StreamWriter sw; 

     ProcessStartInfo psi = new ProcessStartInfo(@"bar.exe"); 
     psi.UseShellExecute = false; 
     psi.RedirectStandardOutput = true; 
     psi.RedirectStandardError = true; 
     psi.RedirectStandardInput = true; 
     psi.CreateNoWindow = true; 
     p.StartInfo = psi; 
     p.Start(); 

Esto iniciará un proceso hijo sin mostrar la ventana de la consola, y permitirá la captura de la StandardOutput, etc.

+0

Su respuesta es mucho más informativa que la mía +1 –

+0

solo tuve que hacer lo mismo no hace 2 horas :) –

+0

Olvidó hacer algo con los StreamReaders y StreamWriter. –

-1

Hemos hecho esto en el pasado al ejecutar nuestros procesos utilizando la línea de comandos programáticamente.

5

Ingrese en ProcessStartInfo y configure WindowStyle = ProcessWindowStyle.Hidden y CreateNoWindow = true.

+1

Para aplicaciones de consola, me he dado cuenta que sólo tiene el ** ** WindowStyle = ProcessWindowStyle.Hidden. No necesita el ** CreateNoWindow = true **. –

1

Si desea recuperar la salida del proceso mientras se está ejecutando, usted puede hacer lo siguiente (ejemplo utiliza el comando 'ping'):

var info = new ProcessStartInfo("ping", "stackoverflow.com") { 
    UseShellExecute = false, 
    RedirectStandardOutput = true, 
    CreateNoWindow = true 
}; 
var cmd = new Process() { StartInfo = info }; 
cmd.Start(); 
var so = cmd.StandardOutput; 
while(!so.EndOfStream) { 
    var c = ((char)so.Read()); // or so.ReadLine(), etc 
    Console.Write(c); // or whatever you want 
} 
... 
cmd.Dispose(); // Don't forget, or else wrap in a using statement 
Cuestiones relacionadas