让程序异常退出后自动重启

“程序 FreeEIM.exe 遇到问题异常退出,是否重启?”,类似的情况我们似乎碰见过,很多程序都有这个功能;这是怎么实现的呢?经

过一番努力,在MSDN找到了SetUnhandledExceptionFilter函数,利用它,可以实现这个功能。其实这个过程叫做SEH("Structured Exception

Handling")结构化异常处理。是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。我在这里简单的说一下如何使用,如有错

误,请高手不吝指正。

有了它,太好了。要是你的程序无缘无故荡掉了,你可以利用它,帮你的程序重启。

一,处理函数
程序在出现异常时,会调用这个函数,我们就在这里处理程序荡后的所有事,包括重启。
原型:LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo);
我们这里先简单试验一下。

LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
MessageBox(NULL,"FreeEIM","FreeEIM",MB_OK);
return EXCEPTION_EXECUTE_HANDLER;
}// 此代码可以 COPY - PASTE 使用。

然后在OnInitDialog()里加入:

SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);// 此代码可以 COPY - PASTE 使用。
int *i=0;// 此代码可以 COPY - PASTE 使用。
*i=0;// 此代码可以 COPY - PASTE 使用。

编译看看有什么结果。

二,如何重启
重启也不难,这里我们用到一个函数WinExec,函数比较常用,不熟悉的上GOOGLE找一下。

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;
}// 此代码可以 COPY - PASTE 使用。

然后在OnInitDialog()里加入:

SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);// 此代码可以 COPY - PASTE 使用。
int *i=0;// 此代码可以 COPY - PASTE 使用。
*i=0;// 此代码可以 COPY - PASTE 使用。

编译一下,一个简单的异常重启程序就实现了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值