2009-07-08 32 views

Respuesta

39

Si proc.StartInfo.UseShellExecute es falsa, a continuación, va a iniciar el proceso y puede utilizar:

proc.StartInfo.CreateNoWindow = true; 

Si proc.StartInfo.UseShellExecute es cierto , a continuación, el sistema operativo es iniciando el proceso y debe proporcionar una "pista" al proceso a través de:

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

Sin embargo, la llamada La aplicación ed puede ignorar esta última solicitud.

Si se utiliza UseShellExecute = falsa, es posible que desee considerar redirigir la salida/error estándar, para capturar cualquier registro generado:

proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 
proc.StartInfo.RedirectStandardError = true; 
proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 

Y tienen una función como

private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
{ 
    if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow; 
} 

Hay una buena página que cubre CreateNoWindow esto en an MSDN blog.

También hay un error en Windows que puede arrojar un cuadro de diálogo y derrotar CreateNoWindow si está pasando un nombre de usuario/contraseña. Para más detalles

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858

+0

A veces funciona, otros no. ¿Esto depende de los comandos del archivo bat? – Ahmed

+0

Ahmed, he hecho la respuesta más completa y las dos opciones diferentes que tiene para ocultar la ventana. Además, dependiendo de la aplicación, creo que todavía puede tener que salir y hacer algunas ventanas a pesar de sus mejores esfuerzos. –

5

Uso: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

+1

veces funciona, otras doesn 't. ¿Esto depende de los comandos del archivo bat? – Ahmed

7

De acuerdo con la Process properties, usted tiene una:

propiedad: CreateNoWindow
Notas: Permite ejecutar un programa de línea de comandos en silencio. No muestra una ventana de consola.

y:

propiedad: WindowStyle
Notas: Utilice esta opción para configurar las ventanas como ocultos. El autor ha usado ProcessWindowStyle.Hidden menudo.

Como ejemplo!

static void LaunchCommandLineApp() 
{ 
    // For the example 
    const string ex1 = "C:\\"; 
    const string ex2 = "C:\\Dir"; 

    // Use ProcessStartInfo class 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.CreateNoWindow = false; 
    startInfo.UseShellExecute = false; 
    startInfo.FileName = "dcm2jpg.exe"; 
    startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2; 

    try 
    { 
     // Start the process with the info we specified. 
     // Call WaitForExit and then the using statement will close. 
     using (Process exeProcess = Process.Start(startInfo)) 
     { 
      exeProcess.WaitForExit(); 
     } 
    } 
    catch 
    { 
     // Log error. 
    } 
} 
+1

A veces funciona, otros no. ¿Esto depende de los comandos del archivo bat? – Ahmed

0

Esto es lo que funcionó para mí, Al redirigir toda la entrada y la salida, y configurar la ventana oculta que debería funcionar

  Process p = new Process(); 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.RedirectStandardInput = true; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.CreateNoWindow = true; 
Cuestiones relacionadas