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

识别C#Process.Start()运行的可执行文件的崩溃,c#,dump,exit-code,unhandled-exception,processstartinfo,C#,Dump,Exit Code,Unhandled Exception,Processstartinfo,我的代码: ProcessInfo processInfo = ... Process proc = Process.Start(processInfo); proc.WaitForExit(); if (proc.ExitCode != 0) { // ... } 我的问题是,在未知的情况下,由于未处理的异常,进程(C++可执行文件)有时会崩溃 我可以看出可执行文件崩溃了,因为在崩溃时它返回一个负的退出代码(或者非零)。但是,我无法创建要调查的进程转储 如果我至少弹出了Windows的

我的代码:

ProcessInfo processInfo = ...
Process proc = Process.Start(processInfo);
proc.WaitForExit();
if (proc.ExitCode != 0)
{
   // ...
}
我的问题是,在未知的情况下,由于未处理的异常,进程(C++可执行文件)有时会崩溃

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

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


当然,我可以使用像Debug Diag这样的软件来监视可执行文件并在崩溃时转储,但我更希望有一个更通用的内部解决方案。

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

除了标准输出外,您是否还尝试捕获标准输出

例如:

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...
Process installProcess=新流程
{ 
StartInfo=
{
FileName=exeName,
参数=args,
CreateNoWindow=true,
UseShellExecute=false,
WindowsStyle=ProcessWindowsStyle.Hidden,
重定向标准输出=真,
重定向标准错误=true
}
};
installProcess.Start();
字符串processStandardOutput=installProcess.StandardOutput.ReadToEnd();
字符串processStandardError=installProcess.StandardError.ReadToEnd();
//检查两个字符串是否存在错误!IsNullOrEmpty并记录感兴趣的内容
installProcess.WaitForExit();
ExitCode=installProcess.ExitCode;
//如果ExitCode<0,则记录StandardError输出。。。