2016-10-26 6 views
1

저는 작은 콘솔 응용 프로그램이있어서 C#의 출력을 읽고 싶습니다. 따라서이 코드 스 니펫을 만들었습니다. 명령 프롬프트가 열리지 만 아무 것도 표시되지 않습니다. 내가 UseShellExecute, RedirectStandardOutput과 마지막 줄을 제거하면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(); 

는, 명령 프롬프트가 열리고 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(); 
관련 문제