2016-12-01 60 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... 

相關問題