如何让程序异常退出后重启

C#程序异常退出的捕获、继续执行与自动重启 本文讲解C#程序异常退出的捕获、继续执行与自动重启。 阅读详情

标 题:如何让程序异常退出后重启
发信人:蔡子楠
出处:http://www.freeeim.com/
时 间:2008-02-14 11:25:22

     “程序 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 使用。

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


参考文档

《SEH in ASM 研究》 原文地址:http://www.pediy.com/bbshtml/bbs4/kanxue310.htm
作者:Hume/冷雨飘心

程序关闭自动重启 立即下载

相关推荐

捕获程序异常退出的代码

MSJExceptionHandler类,很好用的一个Windows 程序异常破获类,只需要添加至工程里一起编译一下就可以,不需要另外写代码。 结合PDB文件可以定位至出错的代码行,内附Visual studio 结合PDB文件调试DMP的方法。

计算机进程关闭后又重启,Windows 10电脑关机后又自动重启如何解决

部分Windows 10系统的用户可能会碰到这样的情况,在系统中执行关机操作后,电脑关闭后又自动重启了,这个问题可以说非常烦人。下面会列出几种有可能解决问题的办法,但由于出现关机重启的原因多种多样,在没找到根本原因前只能当作尝试,并不能保证完全有用。1、关闭快速启动功能打开控制面板,搜索“电源”,选择“更改电源按钮的功能”。也可以从 设置 - 系统 - 电源和睡眠 - 其他电源设置 进入。点击“更...

weixin_34643336的博客 5809

ESP32蓝牙配网实战:微信小程序中的blufi协议实现与优化

本文详细介绍了在微信小程序中实现ESP32蓝牙配网的实战经验,重点解析了blufi协议的应用与优化。内容涵盖从开发环境配置、协议帧格式解析,到小程序端蓝牙通信、数据转换的核心步骤,并提供了配网状态机设计、错误处理及性能调优等进阶方案,旨在帮助开发者高效、稳定地完成物联网设备配网功能开发。

weixin_29159613的博客 459

程序崩溃后自动重启 重

程序崩溃后自动重启:结合事件循环实现

xie__jin__cheng的博客 1662

西门子1500T插补控制实战:从硬件组态到轨迹规划

本文详细解析了西门子1500T插补控制的完整实战流程。从硬件组态中正确选择带T的CPU和配置报文105,到创建同步轴与插补器工艺对象,再到使用MC_Interpolator功能块编程实现直线与圆弧插补,并分享了调试技巧与常见问题解决方案,为工程师实现高精度复杂轨迹规划提供清晰指导。

weixin_29228781的博客 425

【大模型+知识图谱】哈工大版chinese-roberta-wwm-ext模型介绍、下载部署和GPU显卡配置

RoBERTa模型的一个重要改进版本,由阿里云的研究团队提出。而Chinese RoBERTa-wwm-ext则是针对中文文本的预训练模型,它在哈工大的研究团队手中进一步优化,特别适用于中文自然语言处理任务。

知识靠谱的博客 2775

C++程序发生崩溃闪退后为什么会自动重启?是因为程序中启用了重启管理器,系统感知到程序异常退出后自动重启程序

本文详细研究了项目中遇到的C++程序自动重启问题,供大家借鉴或参考。

dvlinker的技术专栏 3万+

全新YOLOv11有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

YOLOv11专栏持续更新500+种创新改进方案,涵盖卷积优化、注意力机制、主干网络、Neck特征融合、检测头、小目标检测等核心模块。提供独家创新点组合方案、模型轻量化改进及最新Mamba架构融合技术,配套完整实验代码和训练参数解析。订阅用户可加入专属答疑群,获取一键运行项目支持。专栏包含YOLOv11网络结构详解、配置文件解读等入门必读内容,助力科研论文发表与模型性能提升。限时开放订阅通道,提供多种涨点改进方案组合,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 4014

C# 软件自动重启

实现软件关闭后自动重启该软件。例如,软件做了一些配置信息的设置后,关闭该软件,软件自动重启。主要是Process类来实现。创建ConsoleApp来实现,测试代码如下:using System.Diagnostics;using System.Threading; class Program    {        static void Main(string[] args)        { 

flysh05的专栏 3308

Android 14.0 系统开机屏幕设置默认横屏显示

在14.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 2151

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色。

非科班Java出身GISer的博客 403

软件崩溃重启

OverrideLog.d("测试", "成功捕捉到异常 " + e.toString());// 捕捉到异常后,后续执行步骤将MyApplication类设置为应用程序的入口点...>...设置为默认的异常处理器@Override// 第三方库return;// 创建自定义的异常处理器对象// 设置自定义的异常处理器为默认的异常处理器。

weixin_51887244的博客 694

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

shell脚本监控程序异常退出并自动重启

一些设备,要求24小时不间断运行,但我们(小白、菜鸟)在写设备板卡上加载的arm程序的时候,就是检查得再仔细,程序也有可能在某个时刻发生异常退出,怎样保证我们的设备能始终运行,通常我们会采用看门狗等方式来监控运行状态,及时修正异常。从软件的层面考虑,我们还经常采用编写监控脚本的方式来重启异常退出的程序。下面以myTest程序为例,编写一个shell脚本,当发现程序异常退出时,重启程序,脚本内容如下: keepalive.sh #! /bin/bash while true do monitor=`ps

dingmeme的博客 3969

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

linux下如何让一个程序在异常退出后自动重启

在 Linux 下让一个程序在异常退出后自动重启,可以使用一些工具来实现。常用的工具有: screen:Screen 是一款用于在 Linux 终端中运行的多窗口工具,可以让你在一个终端窗口中运行多个程序,并且可以对这些程序进行分组、分屏和管理。你可以在 screen 中启动一个程序,然后使用快捷键 Ctrl+A+D 来将其分离,使它在后台运行。如果程序异常退出,你可以使用 screen -r ...

weixin_42593701的博客 1664

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

“程序 FreeEIM.exe 遇到问题异常退出,是否重启?”,类似的情况我们似乎碰见过,很多程序都有这个功能;这是怎么实现的呢?经 过一番努力,在MSDN找到了SetUnhandledExceptionFilter函数,利用它,可以实现这个功能。其实这个过程叫做SEH("Structured Exception Handling")结构化异常处理。是操作系统提供给程序设计者的强有力的处理程序错误

听风 7200

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java程序崩溃怎么重启_如何优雅的退出应用和处理崩溃异常并重启

写在前面这是最近一些朋友问我的问题,我把它整理成了一个库,供大家享用,GitHub 地址:https://github.com/nanchen2251/AppManager从四个应用场景说起退出应用相信各位朋友或多或少都会有遇到过需要在某个特定的地方退出应用的需求,这个场景一定非常普遍。崩溃后重启程序总是无法做到尽善尽美,有时候你也不知道因为什么原因导致了 APP 的崩溃,这无疑是非常糟糕的用户体...

weixin_42130889的博客 1218

C#WinForm程序异常退出的捕获、继续执行与自动重启

如果一个线程里运行下面的代码 int a = 0; int c = 10 / a; 将会导致程序自动结束,而且没有任何提示信息 但是如果是在主线程里运行这个代码,是会弹出异常信息对话框的 请问如何在线程里也出现这个异常信息对话框.或者避免程序直接退出,忽略异常,继续往下执行呢? 在WINFORM主线程捕获全部异常就行,如下代码: ...

DavidLiu的博客 5155

Qt 程序异常退出生成Dump文件并重启[转]

Qt 程序异常退出生成Dump文件并重启[转] 参考:Qt(windows下)捕获异常信息并自动重启_joyopirate的博客-优快云博客 头文件 #include <Windows.h> #include <DbgHelp.h> #include <QTextCodec> #include <QDir> #include <QFileInfoList> #include <QFileDialog> #include <

baidu_41388533的博客 869

转 C#WinForm程序异常退出的捕获、继续执行与自动重启

转 C#WinForm程序异常退出的捕获、继续执行与自动重启

weixinhmz的博客 354

将java程序注册成windows服务自启动并异常退出自动重启

在windows服务器将java程序注册成系统服务,开机启动,异常自动重启

博客 1689
上一篇: VC下发布的Release版程序的异常捕捉
下一篇: 发些c/c++/vc/驱动/网络安全的好书和资料
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值