2011-08-12 3 views
0

내가 사용하는 콘솔 응용 프로그램에서 GUI를 만들고 있는데 C# Process 및 RedirectStandardInput/Error/Output을 사용하려고합니다.C#에서 콘솔 리디렉션 문제 C#

문제는 콘솔 응용 프로그램에서 데이터 인쇄를 중단하고 표준 응용 프로그램을 리디렉션 한 후 콘솔 응용 프로그램 창 자체를 보지 못했습니다. 아무 것도하지 않고 stdin, out 및 err을 리다이렉트하여 데이터를 수신하지 못했습니다. 프로그램.

표준 리디렉션과 작동하지 않는 테스트를 거친 애플리케이션은 구현 문제입니까?

코드 :

아마도
fmproc = new Process(); 

fmproc.StartInfo.FileName = @"fm.exe"; 
fmproc.StartInfo.Arguments = ""; 
fmproc.StartInfo.UseShellExecute = false; 
fmproc.StartInfo.CreateNoWindow = false; 

fmproc.StartInfo.RedirectStandardInput = true; 
fmproc.StartInfo.RedirectStandardError = true; 
fmproc.StartInfo.RedirectStandardOutput = true; 

fmproc.Start(); 

fmproc.StandardOutput.ReadLine(); 
+5

코드를 게시하십시오. – Yuck

+0

사용하려는 콘솔 응용 프로그램도 게시하십시오. – Brian

+0

게시 됨, 기본 리디렉션 코드이며 미안하지만 콘솔 응용 프로그램을 게시 할 수 없습니다. 코드는 stdout을 읽지 만 표준 오류로도 테스트했습니다. – Caian

답변

0

당신이 시도 할 수 :

fmproc.StandardOutput.ReadToEnd(); 
fmproc.WaitForExit(); 

을 오히려에서는 ReadLine보다(); 물론 출력 문자열을 사용하여 더 흥미로운 부분을 원할 수도 있습니다. 그러나 예제 코드를 따르고 있습니다.

+0

문제는 프로그램이 계속 실행 중이고 물건을 처리하는 동안 명령을 쓰고 응답을 읽어야하는 이유입니다. 종료를 기다릴 수 없습니다. – Caian

+0

충분하지만, 하나의 ReadLine()을 넘어 무엇을 시도해 보셨습니까? 개행 문자가 없기 때문에 readline이 멈 춥니 다? – iandotkelly

+0

글쎄 방금 2 가지 문제를 발견했습니다. 첫 번째 줄은 비어 있었고 ReadLine은 비어있었습니다. 두 가지가 있습니다. 응용 프로그램이 버퍼를 플러시하지 않고 명령을 내린 것입니다. 맞아 ... 내 새로운 문제는 다른 응용 프로그램을 강제로 플러시 할 수 있습니까? – Caian