2009-06-26 95 views
1

我有一個C#應用程序,它通過調用的Process.Start()如何檢測非託管的應用程序已經中止

在某些機器上的非託管C++應用程序,如果C++應用程序中止,我留下的只是 - 在時錯誤對話框顯示

是否有從C#的方式來檢測到C++應用程序已發生錯誤,只是重新啓動它

(我沒有來源,因此不能修改C++應用程序)

+0

基於應用程序控制臺還是有GUI? – CiscoIPPhone 2009-06-26 11:58:19

回答

1

顯示JIT調試器對話框,因爲C++應用程序以某種方式崩潰。在對話框打開的同時,這個過程仍然存在(但暫停),這意味着Process類不會認爲它已經「退出」,直到JIT對話框被解除或附加的調試器結束該過程。

您既可以在機器上遇到問題禁用JIT調試(我認爲,禁用計算機調試管理器服務可能會禁用JIT調試),可讓應用程序崩潰和死亡(因此,報告爲「退出「),或者(我不知道如何去做這件事),看看你是否可以讓你的主機C#應用程序自己作爲C++應用程序的調試器,並從C++應用程序接收崩潰通知,終止它,然後根據已結束的信息採取行動。

0

如果C++是基於控制檯的,您可以檢查兩件事情,

  1. 的退出碼,通常0表示常閉,否則是問題(但我認爲這取決於約定用於開發此應用程序)

  2. 檢查標準錯誤,如果它是空的,所以一切都是確定

    使用(方法p =新工藝()){

    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.RedirectStandardError = true; 
    p.StartInfo.FileName = "any.exe"; 
    p.Start(); 
    string error = p.StandardError.ReadToEnd(); 
    p.WaitForExit() 
    if(error.Length == 0 && p.ExitCode == 0) 
    { 
    } 
    } 
    
相關問題