2014-10-06 3 views
-2

Моя цель - выполнить внешний .bat-файл с C#. Проблема в том, что я должен отображать результаты выполненных летучих мышей в моей форме, а не в консоли. Решения на google показывают мне, как начать летучую мышь, но не как получить содержимое с консоли.Запуск .Bat в форме C#

Что может быть лучшим способом реализовать это?

+0

проверить это http://stackoverflow.com/questions/11177554/ c-sharp-bat-file-execution-with-error-output-redirection –

+0

Не помогает, я хочу, чтобы результат все время, а не только после его завершения. Он должен обновлять каждую строку, которую генерирует летучая мышь. – Horius

+0

Вы можете использовать proc.StandardOutput.ReadLine() вместо proc.StandardOutput.ReadToEnd() для чтения каждой строки, поскольку она выводится –

ответ

4

вы можете использовать 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(); 
Смежные вопросы