2011-12-02 179 views
0

我有一個用C++編寫的Windows應用程序,有時會崩潰。有沒有辦法以編程方式忽略模式對話框並自動重新啓動應用程序?以編程方式重新啓動應用程序崩潰

+11

另一種解決方案......弄清楚它爲什麼有時會崩潰和解決問題! – Praetorian

+3

[防止win32進程崩潰的模態對話框]可能的重複(http://stackoverflow.com/questions/1861506/prevent-modal-dialog-on-win32-process-crash) –

+0

用於泄漏的統計數據包S-Plus內存可怕,其解決方案就是這樣。當它認爲它接近邊緣時,它會保存它的狀態,重新啓動,恢復狀態並繼續。毋庸置疑,這不是用戶基礎的好的解決方案!遵循Praetorian的建議並修復疾病,而不是設法治癒。 –

回答

4

我從病毒中學到的東西:使用服務來檢查您的應用程序是否正在運行。如果服務檢測到應用程序未運行,請啓動該應用程序。不管你喜歡如何實施這項服務。

+0

非常非常好。該服務甚至不一定是實際的服務,只是另一個程序。 –

+1

因此....病毒掃描程序是病毒。 –

+2

如果您曾嘗試從您的計算機中刪除病毒掃描程序,您將能夠看到相當多的相似之處,是的 – jalf

0

編寫重新登場未處理的異常處理程序。如果您需要確保您有記憶功能,請預先分配。

如果您從錯誤中恢復過多的保證,您將無法修復錯誤。

另外,最好通知某人它發生故障並關機。如果您在每次程序啓動時都會重複出現問題,那該怎麼辦?然後它看起來像你的程序總是在運行,但它沒有做任何事情。

0

在VC++:

//-- a Top-level Exception Handler in process level 
LONG WINAPI TopLevelExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) 
{ 

// find app name to re execute it. 
TCHAR szPath[_MAX_PATH]; 
VERIFY(::GetModuleFileName(AfxGetApp()->m_hInstance, szPath, _MAX_PATH)); 
CString csPath(szPath); 

// re execute. 
ShellExecute(NULL, "open",csPath , NULL, NULL, 1); 

// 
exit(-1); 
return EXCEPTION_CONTINUE_SEARCH; 
} 


main() 
{ 
    //set a Top-level Exception Handler in process level to re execute app. 
    SetUnhandledExceptionFilter(TopLevelExceptionHandler); 
    . 
    . 
    . 
} 
+0

儘管此代碼可能會解決該問題,但一個好的答案應始終包含關於如何/爲什麼的解釋這有助於。 – BDL

+0

謝謝@BDL。我編輯並添加評論來回答 – aminM