禁用“应用程序已停止工作”窗口

5
我们有一个.NET WCF服务,理想情况下应该是100%的正常运行时间。但是,我们的应用程序有时会出现由第三方DB连接组件引起的内存泄漏问题。我们配置了nnCron来监视进程是否存在,当该服务的进程退出时,它应该重新启动该服务。
但是,当应用程序崩溃时,Windows会弹出一个嘈杂的窗口,通知应用程序已崩溃。
如下图所示: enter image description here 只有当我们点击愚蠢的“关闭程序”按钮后,进程才真正从系统中消失。而且只有在此之后,nnCron才会重新启动服务。我们不想监视此窗口的出现,只想为nnCron成功工作摆脱它。
那么,我们如何禁用这样的窗口?
操作系统是Windows Server 2008 R2 Standard。

1
为什么不将您的服务设置为Windows服务? - John Saunders
所以,将其变成Windows服务。为IGetInternalInformation实现一个额外的契约。让您的控制台调用该契约上的方法。 - John Saunders
通常在异常未被捕获时会出现该对话框。我喜欢在我的主方法中添加try catch来解决这个问题。很难说你是否能够捕获它,也许包括您的堆栈跟踪和错误信息。 - Iain
也许你没有捕获线程异常?链接 - Muaddib
1
可能是重复的问题:如何防止在我的Server 2008 R2开发机上出现“...已停止工作” 窗口?(https://dev59.com/6kzSa4cB1Zd3GeqPpcMs) - Mike Nakis
显示剩余2条评论
1个回答

9
我知道这是一个老问题,但我也遇到了同样的问题并找到了解决方法。
在应用程序开始时调用以下内容:
SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX );

我已经尝试了一个非常简单的测试应用程序,试图取消引用空指针。如果没有上面的代码行,我的测试应用程序将显示“...已停止工作对话框”。有了上面的代码行,应用程序就会安静地死掉。
参考资料: 编辑:这里有一个选项可以在不修改代码的情况下全局禁用该对话框。创建以下注册表值作为REG_DWORD并将其值设置为1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\DontShowUI

参考:WER设置

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接