2011-12-02 132 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

相关问题