在Windows中避免系统崩溃信息

5
我的应用程序需要扫描第三方文件,但经常会导致崩溃。为了克服这个问题,它使用一个单独的进程来扫描这些文件,每当此进程崩溃时,我的应用程序就会实例化另一个进程。
我的问题是,每次崩溃后,我都会收到Windows崩溃消息:“AuxScanner已停止工作...”
如何避免这个消息并安静地崩溃?
我正在使用命名管道进行进程间通信。
谢谢
3个回答

7
请查看http://blogs.msdn.com/b/oldnewthing/archive/2004/07/27/198410.aspx:你可以禁用程序崩溃对话框(但需要从子进程内部这样做)。
按照我的理解,你希望在子进程中实现类似以下的功能:
#include <windows.h>

//...

SetErrorMode(SetErrorMode(0) | SEM_NOGPFAULTERRORBOX);
//or if you only care about Vista or newer:
//SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX);

顺便说一下,这是一个有趣的问题 - 在开发过程中将其插入各种软件可能会很有趣;当你正在积极开发的代码崩溃时(不出所料),一切都停滞了,你的用户界面改变了焦点,并且它提供了向微软发送崩溃转储的选项(毫无意义)...


2
如果你看到“...已停止工作”错误信息,就说明你没有处理异常。确保可能引起崩溃的代码部分都被包含在try/catch块中,并优雅地处理异常。

1
我喜欢这个答案。它并没有回答原始问题,而是直接指出了Shlomi Tsur忽略的一点,即无论处理的文件内容如何,进程在第一时间崩溃是没有道理的。 - DataGraham

1

根据文档,SetErrorMode(SEM_NOGPFAULTERRORBOX)会覆盖先前的标志 - 您希望保留其他标志不变,只需添加该标志即可。 - Eamon Nerbonne

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