ファイルにstdout
とstderr
をリダイレクトしながら、私は、コマンドラインから実行可能ファイルを実行しています:"start/w"は、プロセスがstdoutとstderrに書き込みを行えないのはなぜですか?
MyApp.exe 1>out.txt 2>err.txt
ファイルがすぐに作成し、ときMyApp.exe
完了のプロセスに更新されます。
しかし、コマンドを実行した直後にコマンドラインプロンプトが表示されるため、プロセスが実際に完了するタイミングについてはわかりません。
したがって、私は積極的にプロセスの完了を待つしたいと思います:
start/w MyApp.exe 1>out.txt 2>err.txt
これは確かに完了するのを待っているの目的を達成しています。
ただし、out.txt
とerr.txt
ファイルは更新されません(空のままです)。
誰かが間違っていることを説明してください。どうすればそれを解決できますか?
ありがとうございます。
UPDATE:私は代わりに、コマンドラインのバッチファイルから(start /w
プレフィックスを除く)、元のコマンドを実行して、問題を解決することができました
。私はまだこの問題の理由を知りたい。
'start':あなたは(リダイレクト記号をエスケープすることで)解析する1つのレベルの間でリダイレクトを「保存」する必要があります。この場合、ハンドルテーブルのout.txtとerr.txtのハンドルを継承していても、PEBの標準ハンドル値をNULLに設定してプロセスを開始します。次に、コンソールアプリケーション(明らかにあなたのケースではない)の場合、新しいコンソール(conhost.exe)が生成されると、システムは標準ハンドル値をコンソールに設定します。 CMDが 'STARTUPINFO'標準ハンドルを使用した場合、これは問題にはなりません。これは、このデフォルトの動作を無効にします。 – eryksun
'/ B'オプションを使用した場合、'/B'は待機を無効にするので、コマンドラインで '/ W'の前に来なければなりません。たとえば、 'start/b/w MyApp.exe 1> out.txt 2> err.txt'のようにします。 – eryksun