WINAPI: отключить наследование дескрипторов stdin stdout stderr

Я создал дочерний процесс с CreateProcess с флагом BOOL bInheritHandles = TRUE как я хочу передать некоторые дескрипторы анонимным каналам дочернему процессу.

я имею НЕ выставиться hStdInput, hStdOutput а также hStdErroг и а STARTF_USESTDHANDLES флаг в STARTUPINFO struct, так как я не хочу что-то делать с дочерним stdout и т. д.

но дочерний процесс, кажется, наследует дескрипторы буферов консоли, и его вывод идет прямо в консоль родительского приложения. я хочу это предотвратить, поэтому я использовал
SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), HANDLE_FLAG_INHERIT, 0);
который сообщает об ошибке 87 — ERROR_INVALID_PARAMETER

Что я делаю неправильно?

-1

Решение

Сообщение об ошибке говорит вам, что вы не можете установить HANDLE_FLAG_INHERIT для стандартной ручки вывода.

Вместо этого вы должны создать процесс, передавая либо DETACHED_PROCESS или же CREATE_NEW_CONSOLE создание флагов. Или, если вы не хотите, чтобы дочерний процесс использовал другую консоль, вам нужно предоставить стандартные дескрипторы в STARTUPINFO структура.

1

Другие решения


По вопросам рекламы [email protected]