2014-10-06 3 views
-2

내 목표는 C#의 외부 .bat 파일을 실행하는 것입니다. 문제는 실행 된 박쥐의 결과를 콘솔이 아닌 내 양식으로 표시해야한다는 것입니다. Google 솔루션은 박쥐를 시작하는 방법을 보여 주지만 콘솔에서 콘텐츠를 가져 오는 방법은 제시하지 않습니다.C# 형식의 .Bat 실행

이것을 실현하는 가장 좋은 방법은 무엇일까요?

+0

확인이 http://stackoverflow.com/questions/11177554/ c-sharp-bat-file-execution-with-error-output-redirection –

+0

도움이 안되면, 출력이 끝난 후에가 아니라 전체 시간을 갖고 싶습니다. 방망이가 생성하는 각 행을 업데이트해야합니다. – Horius

+0

proc.StandardOutput.ReadToEnd() 대신 proc.StandardOutput.ReadLine()을 사용하면 각 행을 출력 할 때 읽을 수 있습니다. –

답변

4

당신은 Process 클래스의 StandartOutputEvent를 사용할 수 있습니다

const string BATFILE = "Test.bat"; 
    const bool HIDE = true; 
    static Encoding ENCODING = Encoding.Default; 

    static void Main(string[] args) 
    { 
     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd", BATFILE); 

     if (HIDE) 
     { 
      psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     } 

     psi.RedirectStandardOutput = true; 
     psi.StandardOutputEncoding = ENCODING; 
     psi.UseShellExecute = false; 

     System.Diagnostics.Process p = new System.Diagnostics.Process(); 
     p.StartInfo = psi; 
     p.OutputDataReceived += p_OutputDataReceived; 

     p.Start(); 
    } 

    static void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) 
    { 
     //Do something with a form... 
     System.Console.WriteLine(e.Data); 
    } 
1

난 당신이 너무이 필요 필요가 있다고 생각 :

...     
psi.RedirectStandardOutput = true; 
psi.RedirectStandardError = true; 
... 

p.Start(); 

p.checkoutProcess.BeginOutputReadLine(); 
p.checkoutProcess.BeginErrorReadLine();