В чем разница между флагами создания процесса DETACH_PROCESS и CREATE_NO_WINDOW для функции createProcess - PullRequest
11 голосов
/ 16 июня 2011

Я пытался понять разницу между этими двумя флагами создания процесса.Документация msdn не дает четкого представления о различии.

  • Вызывает ли CREATE_NO_WINDOW консоль процесса (инициализированные стандартные потоки ввода / вывода) без отображения окна, в то время как DETACH_PROCESS вообще не имеет консоли?
  • Каковы последствия дляпроцесс child-of-a-child?
  • Какова будет матрица поведения, описывающая, что происходит при каждой комбинации (у родителя есть консоль, у родителя нет консоли) X (дочернему исполняемому файлу требуется консоль (main), дочерний исполняемый файл не требует консоли (WinMain)).?

1 Ответ

16 голосов
/ 25 мая 2012

Разница в том, что может сделать запущенный процесс.В обоих случаях у него не будет консоли.Но с опцией CREATE_NO_WINDOW он может вызвать AttachConsole (ATTACH_PARENT_PROCESS) и получить доступ к окну консоли родителя (если доступно).Это явно не будет работать, если вы укажете DETACH_PROCESS.Тогда единственный вариант для запущенного процесса - использовать AllocConsole () для создания собственной консоли.

Или, другими словами, вы можете быть уверены, что запущенный процесс никогда не сможет общаться с вашей собственной консолью,используя DETACH_PROCESS.

...