C# – 捕获Windows应用程序输出

我的应用程序启动“C:\ Windows \ System32 \ Msra.Exe”来控制域计算机。 有没有一种方法可以捕获这个msra.Exe显示的错误消息。 (即从msra.exe的内部错误消息,而不是从我的应用程序。)该应用程序本身是一个Windows窗体应用程序。

任何帮助表示赞赏。

启动MSRA的代码在下面…这只是完整应用程序的一小部分。

string msra = "C:\\Windows\\System32\\runas.exe"; string domainname = "**********"; string domaincontroller = "*************"; if (File.Exists(msra) == false) { System.Windows.Forms.MessageBox.Show("Runas.exe not found.\n\rPlease contact your internal IT support.", "Fatal Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } else { try { Process p = new Process(); p.StartInfo.UseShellExecute = true; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; p.StartInfo.ErrorDialog = true; p.StartInfo.FileName = msra; p.StartInfo.Arguments = "/noprofile /netonly /user:" + domainname + "\\" + username + " \"cmd /server:" + domaincontroller + " /C msra.exe /offerra " + computerip + "\""; p.Start(); p.Dispose(); Thread.Sleep(1700); SendKeys.SendWait(password); SendKeys.SendWait("{ENTER}"); } catch { System.Windows.Forms.MessageBox.Show("MSRA could not be started for an unknown reason"); } } 

您可以将RedirectStandardOutputRedirectStandardError设置为true ,以便能够从流程的标准输出或错误输出读取。

然后你有几个选择如何实际读取数据:

  • 使用StandardOutput属性
  • 子输出到OutputDataReceived事件并调用BeginOutputReadLine()

或者错误流的相应成员。

您正在使用Process,请尝试Process.StandardError属性。 你分配一个流,你将能够使用它。

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standarderror.aspx

而当你在那里,你也可以使用Process.StandardOutput

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx