2011-12-25 3 views
0

Выполнение этого кода:Чтение стандартный вывод из процесса, всегда пустой

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.FileName = "tool.exe"; 
p.Start(); 
p.WaitForExit(); 

Делает tool.exe бежать, и выход некоторых контента на стандартный вывод. Однако, если я пытаюсь захватить содержимое с помощью:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.FileName = "tool.exe"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
p.WaitForExit(); 

Console.WriteLine(output); 
Console.ReadLine(); 

Тогда ничто не выводится, то есть моя переменная «выход» всегда пусто.

Я проверил, что tool.exe действительно выводит на стандартный вывод (а не стандартную ошибку).

У кого-нибудь есть ключ к тому, что происходит? Начиная чувствовать себя глупо здесь, как это кажется настоящим учебником пример ...

+0

Это, вероятно, ждет ввода. – SLaks

+0

Спасибо за предложение, но если tool.exe запущен без параметров, он сразу же выводит некоторый контент (который пытается захватить). – Marcus

ответ

0
p.OutputDataReceived += new DataReceivedEventHandler 
     (
      delegate(object sender, DataReceivedEventArgs e) 
      {     
       using (StreamReader output = p.StandardOutput) 
       { 
        retMessage = output.ReadToEnd(); 
       } 
      } 
     ); 

Попробуйте это :)

+0

Спасибо! Все равно не повезло, но .. Просто ничего не происходит. – Marcus

+0

является tool.exe консольным приложением? Вы пытались запустить его в cmd.exe? Каков результат? – Elastep

+0

Да, это консольное приложение (которое я включил в мой проект). Он печатает пару строк. – Marcus