シェルを介して任意のプログラムを呼び出し、その出力をログに記録する必要がある製品用の win32 ユーティリティ関数を作成しています。これを行うには、stdout を子プロセスからパイプにリダイレクトします。
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0);
// Redirect the first process stdout to our write pipe
// so that we can read its output from the read pipe.
startUpInfo.dwFlags = STARTF_USESTDHANDLES;
startUpInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startUpInfo.hStdOutput = hWritePipe;
startUpInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcessA(NULL, szCmdLine, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startUpInfo[i], &procInfo);
このように呼び出される可能性のあるプログラムは多種多様であり、その多くは私たちの管理下にはありません。現在、多くのプログラムからの出力が最初の文字の後に切り捨てられているように見えるという問題が見られます。これは通常、WCHAR 文字列が誤って CHAR として使用されていることを示しています。
子プロセスがその stdout パイプに CHAR または WCHAR として書き込んでいるかどうかを確認するにはどうすればよいですか?