.NET – WindowStyle = hidden vs. CreateNoWindow = true?

Cuando empiezo un nuevo proceso, ¿qué diferencia hay si uso el

WindowStyle = hidden 

o el

 CreateNoWindow = true 

propiedad de la clase ProcessStartInfo ?

Como dijo Hans, WindowStyle es una recomendación que se pasa al proceso, la aplicación puede elegir ignorarla.

CreateNoWindow controla cómo funciona la consola para el proceso secundario, pero no funciona solo.

CreateNoWindow funciona junto con UseShellExecute de la siguiente manera:

Para ejecutar el proceso sin ninguna ventana:

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.CreateNoWindow = true; info.UseShellExecute = false; Process processChild = Process.Start(info); 

Para ejecutar el proceso secundario en su propia ventana (nueva consola)

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = true; // which is the default value. Process processChild = Process.Start(info); // separate window 

Para ejecutar el proceso secundario en la ventana de la consola principal

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = false; // causes consoles to share window Process processChild = Process.Start(info); 

CreateNoWindow solo se aplica a las aplicaciones del modo consola, no creará la ventana de la consola.

WindowStyle solo se aplica a las aplicaciones GUI nativas de Windows. Es una pista pasada al punto de entrada WinMain () de dicho progtwig. Cuarto argumento, nCmdShow, diciéndole cómo mostrar su ventana principal. Esta es la misma sugerencia que aparece como la configuración “Ejecutar” en un acceso directo de escritorio. Tenga en cuenta que “oculto” no es una opción allí, pocos progtwigs de Windows correctamente diseñados respetan esa solicitud. Dado que eso molesta al usuario, ya no puede activar el progtwig y solo puede matarlo con el Administrador de tareas.

Al usar Reflector, parece que WindowStyle se usa si se establece UseShellExecute ; de lo contrario, usa CreateNoWindow .

En el ejemplo de MSDN, puede ver cómo lo configuran:

 // Using CreateNoWindow requires UseShellExecute to be false myProcess.StartInfo.UseShellExecute = false; // You can start any process, HelloWorld is a do-nothing example. myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); 

En el otro ejemplo, está justo debajo porque UseShellExecute está predeterminado en true

 // UseShellExecute defaults to true, so use the WindowStyle ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); startInfo.WindowStyle = ProcessWindowStyle.Minimized;