2

私が欲しいのは、プロセスの標準出力をファイルにリダイレクトすることだけです。簡単そうに聞こえますが、私が試したすべてがうまくいきません。

  1. 引数のリスト(例param1 param2 > output.txt)にDOSスタイルのリダイレクトを入れても機能しません。

  2. 作品を使用しRedirectStandardOutput = trueますが、プロセスが存在する場合、プロセスはイベントを発生させないようです。したがって、を介して定義されたハンドラーprocess.Exited += ... は実行されません。明確にするために、RedirectStandardOutput = trueステートメントを削除すると、イベントが発生します。

私は何を間違っているのですか?

4

1 に答える 1

1

方法 2 を使用する必要があります。この問題は、イベントの
トリガーを妨げる出力バッファリングによって引き起こされているようです。Exited

Exitedイベント ハンドラーを削除することを検討する必要があります。代わりに、イベントをサブスクライブし、ハンドラーでプロパティOutputDataReceivedをチェックProcess.HasExitedして、クリーンアップ ジョブを実行します。

process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);

...

void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Process p = (Process) sender;
    if(p.HasExited) ...
}
于 2012-10-14T01:52:59.593 に答える