Win32程序在出现未处理异常时,会调用这个函数,我们就在这里处理程序挂掉后的所有事,包括重启。
原型:LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo);
我们这里先简单试验一下。
LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
MessageBox(NULL,"FreeEIM","FreeEIM",MB_OK);
return EXCEPTION_EXECUTE_HANDLER;
}
然后在程序初始化代码里加入:
SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);
这里我们用到一个函数WinExec 来实现程序异常重启
LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
char szFileName[_MAX_PATH];
::GetModuleFileName(NULL, szFileName, _MAX_PATH);
if ( MessageBox(NULL,"程序 FreeEIM.exe 遇到问题异常退出,是否重启?","FreeEIM",MB_YESNO)
== IDYES )
WinExec(szFileName, SW_SHOW);
return EXCEPTION_EXECUTE_HANDLER;
}
然后在初始化代码里加入:
SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);