2011-06-16 16 views
9

He intentado comprender la diferencia entre estos dos indicadores de creación de procesos. El msdn documentation no es claro acerca de la distinción.Cuál es la diferencia entre los indicadores de creación de procesos DETACH_PROCESS y CREATE_NO_WINDOW para la función createProcess

  • ¿El CREATE_NO_WINDOW hace que el proceso tiene una consola (Secuencias de entrada/salida estándar inicializan) sin que aparezca una ventana mientras DETACH_PROCESS tiene ninguna consola en absoluto?
  • ¿Cuáles son las implicaciones para un proceso de niño de un niño?
  • Cuál sería la matriz de comportamiento que describe lo que sucede en cada combinación de (padre tiene consola, padre no tiene consola) X (el ejecutable hijo requiere consola (principal), el ejecutable hijo no requiere consola (WinMain)). ?
+0

¿Qué quiere decir con "cada combinación"? MSDN establece claramente: "* Este indicador se ignora si la aplicación no es una aplicación de consola, o si se usa con' CREATE_NEW_CONSOLE' o 'DETACHED_PROCESS'. *" Para 'CREATE_NO_WINDOW'. Entonces, en cierto sentido, son mutuamente excluyentes. – 0xC0000022L

+0

Quise decir combinaciones para hijos y padres que sean ejecutables de consola o que no sean de consola. Si el padre es una aplicación que no es de consola y le lanzo una aplicación de consola con el indicador DETACH_PROCESS, el niño tendrá un error si necesita la consola. – Manny

+0

que depende completamente de la implementación del tiempo de ejecución de C. Si recuerdo correctamente, el MSVCRT no causaría problemas en tal caso. Otros tiempos de ejecución podrían. – 0xC0000022L

Respuesta

13

La diferencia está en lo que puede hacer el proceso iniciado. En ambos casos, no tendrá una consola. Pero con la opción CREATE_NO_WINDOW puede llamar a AttachConsole (ATTACH_PARENT_PROCESS) y obtener acceso a la ventana de la consola principal (si está disponible). Eso explícitamente no funcionará cuando especifique DETACH_PROCESS. La única opción es que el proceso iniciado use AllocConsole() para crear su propia consola.

O, en otras palabras, puede estar seguro de que el proceso iniciado nunca podrá entrar en su propia consola mediante DETACH_PROCESS.

+1

Nota al azar: powershell * no * como DETACH_PROCESS. –

Cuestiones relacionadas