Если вы используете CreateProcess с флагом CREATE_NEW_CONSOLE, новый процесс имеет свои стандартные команды ввода, вывода и ошибок, направленные в новое окно консоли. Если вы хотите переопределить потоки ввода-вывода, вы можете сделать это, установив дескрипторы в полях STARTUPINFO hStdOutput, hStdInput и hStdError и установив флаг STARTF_USESTDHANDLES.CreateProcess с новым окном консоли, но переопределите некоторые дескрипторы ввода/вывода
Но что, если вы хотите переопределить только одну из ручек? Например, я мог бы перенаправить stderr в файл, оставив stdout и stdin подключенными к новому окну консоли.
Флаг STARTF_USESTDHANDLES сообщает CreateProcess, чтобы заменить все дескрипторы вместо подключения к ним для нового окна консоли. Похоже, мы должны предоставить все три ручки. Очевидно, я могу установить hStdError в дескриптор файла журнала, но какие значения следует использовать для hStdInput и hStdOutput?
Я попытался с помощью NULL, который, кажется, работает на Windows, 8.1, но он не работает на Windows 7.
Я также думал о создании первого окна консоли, а затем вызова CreateProcess с ручками к новому буферов консольного окна (и опускания флага CREATE_NEW_CONSOLE). К сожалению, родительский процесс также является консольным приложением, и похоже, что консольное приложение не может создать второе консольное окно.
Обходное решение, если выяснится, что опубликованные ответы не работают: вместо запуска 'program.exe' запуска' cmd.exe/c program.exe> CON