Не уверен, решал ли когда-нибудь Дебеж это, но мне нужно было то же самое, но запуск другого потока для прослушивания вывода stdout, просто поставить его на stdout, показался мне чокнутым.
Следующее работает для меня, и немного отличается от того, что он первоначально отправил. Сначала я подумал, что это не сработает, если вы не установите si.cb, но когда я прокомментировал это в моем, это все еще работало, так что ... YMMV.
STARTUPINFO siStartInfo;
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.hStdError = GetStdHandle(STD_OUTPUT_HANDLE);
siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
siStartInfo.hStdInput = g_hChildStd_IN_Rd; // my outgoing pipe
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
// Create the child process.
bSuccess = CreateProcess(
NULL,
szCmdline,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&siStartInfo,
&piProcInfo);