6

表示されているコンソール ウィンドウ (MSBuild を実行するバッチ ファイル) で実行される子プロセスを生成しています。プロセスによって生成された出力を表示されているコンソール ウィンドウに表示し、その出力をキャプチャしたいと考えています。コードで処理できるようにします。他のいくつかの質問と ProcessStartInfo.RedirectStandardOutput などを扱う MSDN ドキュメントを読みましたが、リダイレクトされたストリームからの出力をキャプチャして、コードで問題なく処理できます。

Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();

問題は、出力が子プロセスのコンソール ウィンドウに表示されないことです。プロセスの実行中に画面に空白のコンソール ウィンドウが表示され、プロセスが終了すると消えます。

実際の子プロセス ウィンドウを非表示にして、2 つ目のウィンドウを表示して、キャプチャした出力を単純に書き込むことができると思いますが、それは必要以上の作業のように思えます。出力をコンソール ウィンドウに表示し、完了時に処理のためにキャプチャする方法はありますか?

4

2 に答える 2

4

別のスレッドを使用せずに、私が使用したものは次のとおりです。


using(System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
   proc.EnableRaisingEvents = false;
   proc.StartInfo.RedirectStandardOutput = true;
   proc.StartInfo.CreateNoWindow = true;
   proc.StartInfo.UseShellExecute = false;
   proc.StartInfo.Verb = "open";
   proc.StartInfo.FileName = "XXXX";
   proc.Start();
   String sLine = "";
   while ((sLine = proc.StandardOutput.ReadLine()) != null)
   {
      System.Console.WriteLine(sLine);
   }
   proc.WaitForExit(); //Jon Skeet was here!
   errorCode = proc.ExitCode;
   proc.Close();
}
于 2009-04-24T17:08:18.343 に答える
3

標準出力をリダイレクトすると、コンソールに向けられなくなります。コンソールに書き込むには、手動で行う必要があります。

最後に 1 つの大きなダンプを表示するのではなく、プロセスの実行中に出力を表示する場合は、Process クラスの「OutputDataReceived」イベントを使用できます。

于 2009-04-24T17:02:59.777 に答える