2

Windows では、CreatePipe と CreateProcess を使用してプロセスを起動し、stderr に書き込まれたテキストをキャプチャしたいと考えています。

ここの MSDN にサンプル コードがあります: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

私の問題は、STDERR をリダイレクトしてキャプチャしたいが、STDIN と STDOUT をそのままにしておくことです。それらを子プロセスのコンソール ウィンドウにバインドしたままにします。(子プロセスがコンソール プロセスであり、ウィンドウ プロセスではない場合。)

サンプル コードに従って、STARTUPINFO.hStdError をパイプ ハンドルに設定し、STARTUPINFO.hStdOutput と STARTUPINFO.hStdInput を INVALID_HANDLE_VALUE に設定すると、子プロセスは INVALID_HANDLE_VALUE を stdin と stdout に設定します。すべての読み取りが失敗します。すべてのprintfはどこにも行きません。コンソールウィンドウは完全に空白です。

これは可能ですか?

4

1 に答える 1

0

これはうまくいくはずです:

STARTUPINFO.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
STARTUPINFO.hStdInput = GetStdHandle(STD_INPUT_HANDLE);

または、親プロセスにコンソールを提供できない場合は、hStdOutput と hStdInput を INVALID_HANDLE_VALUE に設定し、次のように cmd.exe を介して呼び出すことができます。

cmd /c "subprocess.exe > con < con"

SHGetFileInfowithSHGFI_EXETYPEを実行すると、実行可能ファイルがコンソール アプリケーションであるかどうかがわからない場合は、通知されることに注意してください。

于 2012-10-05T01:20:48.333 に答える