确定由C#process.start()运行的可执行文件的崩溃



我的代码:

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

我的问题是,由于未知情况,由于未经治疗的例外,该过程(C++可执行文件)有时会崩溃。

我可以看出可执行文件崩溃,因为在崩溃时,它返回了负面的出口代码(或为此而非零)。但是,我无法创建一个过程转储来调查。

如果我至少有Windows的"程序停止工作"消息弹出,则可以手动创建垃圾箱。

当然,我可以使用Debug Diag之类的软件来监视可执行文件并在崩溃时进行转储,但宁愿有一个更通用的内部解决方案。

您是否尝试捕获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...

我认为这确实取决于可执行的被调用以输出错误。它会输出到窗口,或者在事件查看器等中输入条目,取决于所讨论的应用程序。您应该能够读取输出消息。

最新更新