Как создать дочерний процесс с перенаправленным только вводом - PullRequest
1 голос
/ 20 июля 2011

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

HANDLE my_own_pipe_read_handle = 0, my_own_pipe_write_handle = 0;
// create pipe
CreatePipe( &my_own_pipe_read_handle, &my_own_pipe_write_handle, NULL, 0 );
// create STARTUPINFO
STARTUPINFO siStartInfo;
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
// fill in STARTUPINFO
siStartInfo.cb = sizeof(STARTUPINFO); 
siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
siStartInfo.hStdInput = my_own_pipe_read_handle;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;

Мой вопрос: что я должен дать значениям hStdError и hStdOutput, когда хост-процесс является приложением Win32 (WinMain) (поэтому он не имеет стандартного вывода и стандартной ошибки)? Как бы вы это сделали?

Наконец-то я решил свой проект по TCP / IP, большое спасибо за помощь. Текущее решение будущего проф. :)

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Полагаю, вам нужно будет также предоставить канал для вывода. Это может привести к некоторым сложным ситуациям - я предлагаю вам прочитать недавние сообщения Раймона Чена на эту тему.

0 голосов
/ 20 июля 2011

Убедитесь, что вы не добавили флаг STARTF_USESTDHANDLES в структуру STARTUPINFO. Дескрипторы будут игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...