繁体   English   中英

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

[英]C# - Capturing Windows Application Output

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

任何帮助表示赞赏。

启动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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM