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