我的应用程序需要扫描经常导致崩溃的第三方文件。 为了克服这个问题,它使用一个单独的进程来扫描这些文件 每当这个进程崩溃我的应用程序时,只需实例化另一个。
我的问题是每次崩溃后都会收到Windows崩溃消息: “AuxScanner已停止工作......”
如何防止此消息并安静地崩溃?
我正在使用命名管道进行进程间通信。
由于
答案 0 :(得分:6)
请参阅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);
顺便提一下有趣的问题 - 在开发过程中坚持使用各种软件可能会很有趣;当您积极开发的代码崩溃(并非意外),然后一切都等待,您的UI更改焦点,它提供(毫无意义地)向Microsoft发送崩溃转储时,这非常烦人...
答案 1 :(得分:1)
如果您收到“...已停止工作”消息,则表示您未处理异常。确保可以或可能导致崩溃的代码部分包含在try / catch块中,并优雅地处理异常。
答案 2 :(得分:1)
处理您的.NET(CLR)例外。
处理您的C ++异常。
处理您的SEH exceptions。
请参阅http://blogs.msdn.com/b/kirush/archive/2008/04/24/global-crash-handler-for-c-application.aspx
最后的手段:SetErrorMode(SEM_NOGPFAULTERRORBOX)