以编程方式重新启动应用程序崩溃
我从病毒中学到的东西:使用服务来检查您的应用程序是否正在运行。如果服务检测到应用程序未运行,请启动该应用程序。不管你喜欢如何实施这项服务。
非常非常好。该服务甚至不一定是实际的服务,只是另一个程序。 –
因此....病毒扫描程序是病毒。 –
如果您曾尝试从您的计算机中删除病毒扫描程序,您将能够看到相当多的相似之处,是的 – jalf
编写重新登场未处理的异常处理程序。如果您需要确保您有记忆功能,请预先分配。
如果您从错误中恢复过多的保证,您将无法修复错误。
另外,最好通知某人它发生故障并关机。如果您在每次程序启动时都会重复出现问题,那该怎么办?然后它看起来像你的程序总是在运行,但它没有做任何事情。
在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);
.
.
.
}
另一种解决方案......弄清楚它为什么有时会崩溃和解决问题! – Praetorian
[防止win32进程崩溃的模态对话框]可能的重复(http://stackoverflow.com/questions/1861506/prevent-modal-dialog-on-win32-process-crash) –
用于泄漏的统计数据包S-Plus内存可怕,其解决方案就是这样。当它认为它接近边缘时,它会保存它的状态,重新启动,恢复状态并继续。毋庸置疑,这不是用户基础的好的解决方案!遵循Praetorian的建议并修复疾病,而不是设法治愈。 –