识别C#Process.Start()运行的可执行文件崩溃

时间:2016-12-01 19:32:06

标签: c# dump exit-code unhandled-exception processstartinfo

我的代码:

ProcessInfo processInfo = ...
Process proc = Process.Start(processInfo);
proc.WaitForExit();
if (proc.ExitCode != 0)
{
   // ...
}

我的问题是,在未知的情况下,由于未处理的异常,进程(C++可执行文件)有时会崩溃。

我可以告诉可执行文件崩溃了,因为在崩溃时它会返回一个负退出代码(或者说非零)。但是,我无法创建进程转储以进行调查。

如果我至少弹出了Windows“程序停止工作”消息,那么我可以手动创建转储。

当然,我可以使用像Debug Diag这样的软件来监控可执行文件并在崩溃时进行转储,但更愿意使用更通用的内部解决方案。

2 个答案:

答案 0 :(得分:0)

我认为这实际上取决于被调用的可执行文件输出错误。它输出到窗口或在事件查看器等中放入条目取决于相关应用程序。您应该能够阅读输出消息。

答案 1 :(得分:0)

除了stdOut之外,您是否尝试捕获stdErr输出?

例如:

Process installProcess = new Process 
{ 
    StartInfo = 
    {
        FileName = exeName,
        Arguments = args,
        CreateNoWindow = true,
        UseShellExecute = false,
        WindowStyle = ProcessWindowStyle.Hidden,
        RedirectStandardOutput = true,
        RedirectStandardError = true
    }
};

installProcess.Start();

string processStandardOutput = installProcess.StandardOutput.ReadToEnd();
string processStandardError = installProcess.StandardError.ReadToEnd();

// Check both strings for !IsNullOrEmpty and log something of interest

installProcess.WaitForExit();
ExitCode = installProcess.ExitCode;

// If ExitCode < 0, log the StandardError output...