『QQ:1353814576』

怎么关闭.Net程序崩溃后,弹出了“停止工作”对话框问题


.Net程序奔溃后,弹出了“停止工作”对话框问题,windows如何关闭错误弹窗让程序直接退出的方法

最近一个项目出了点小问题,某个前置小程序运行一段时间后就出现异常直接弹出系统错误提示窗口,问题定位可能调用个一个C++库引发的异常,因为身边没有人懂这块所以目前无法解决,好在程序异常关闭只需要手动重启就可以重新运行,循着这个逻辑自己做了一个监护程序,检测小程序运进程是否存在,根据情况自动重启它。 但实际过程中有个问题很坑,就是系统的那个异常信息弹窗 “某某某 已停止工作”,会阻止程序退出,也就是程序崩溃了进程依然在导致监护程序无法正常工作,小程序层面试了很多办法都行不通,这个弹窗始终无法屏蔽,最终找到了一个修改系统注册表的方法屏蔽掉了这个弹窗

以下是具体的操作方法

网上是这么说的:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting 分支下的DontShowUI和Disabled选项。 其中DontShowUI选项表示是否显示“XX已停止工作”的对话框,Disabled则表示是否禁用Windows错误报告服务。经过测试,如果只开启DontShowUI,程序再奔溃时,虽然不会弹出停止工作的对话框了,但错误报告服务仍然在运行,所以奔溃进程会过几秒才消失。如果开启了Disabled则程序奔溃时,进程迅速消失。

实际操作下来,发现这个注册表项下面没有 DontShowUI和Disabled这两个选项

于是在注册表搜索了下 “Windows Error Reporting” 最终发现在HKEY_CURRENT_USER 下面分支下也存在同名的项 也找到了上述的两个选项 于是按照上面的资料把DontShowUI修改成1(Disabled我这边没修改 目前已经满足当前的需求了)

.Net程序奔溃后,弹出了“停止工作”对话框问题 屏蔽办法

上面的办法有个缺点就是 需要修改注册表附带的就需要重启服务器才能生效 但正常业务运作的服务器 是不能随便重启的

可以考虑下面的方案 就是通过对弹窗进程(WerFault.exe)进行监控 当出现该进程时 直接Kill掉就可以了

然后守护程序就可以正常运作了 我的测试服务器环境是Windows Server 2016以及2008 R2

文章相关exe监护工具TK精灵(EXE进程守护)