2016-12-01 58 views
-1

我的代码:通过C#的Process.Start确定可执行文件运行的崩溃()

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

我的问题是,这一进程(一个C++可执行文件)的某个崩溃因未处理的异常,在未知的情况下。

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

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

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

回答

0

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

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... 

相关问题