2016-10-26 3 views
1

私は小さなコンソールアプリケーションを持っており、C#の出力を読みたいと思います。したがって、このコードスニペットを作成しました。コマンドプロンプトが開きますが、何も表示されません。System.Diagnostic.Processのデッドロック

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
process.StartInfo.FileName = DirectoryPath + "Test.exe"; 
process.StartInfo.Arguments = "-showAll"; 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.Start(); 
process.WaitForExit(2000); 
String strOutput = process.StandardOutput.ReadToEnd(); 

私はUseShellExecuteRedirectStandardOutputと最後の行を削除する場合は、コマンドプロンプトを開き、Test.exeが示されているが、私は文字列として出力を必要とするので、私はStandardOutput

を読み取るために、これらの属性を使用する必要があります

また、2秒(process.WaitForExit(2000))のタイムアウトを設定しようとしましたが、空のコマンドプロンプトは2秒後に閉じません。

デバッグモードで空のコマンドプロンプトを手動で閉じると、変数strOutputに要求された情報があります。

答えて

1

デッドロックを回避するには、終了するまで待機する前に出力ストリームを読み取る必要があります。だから試してみてください:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
    process.StartInfo.FileName = DirectoryPath + "Test.exe"; 
    process.StartInfo.Arguments = "-showAll"; 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.RedirectStandardOutput = true; 
    process.Start(); 
    String strOutput = process.StandardOutput.ReadToEnd(); 
    process.WaitForExit(); 
関連する問題