禁用Windows错误报告(Dr.Watson)为我的过程

我有一个应用程序托pipe一些不稳定的第三方代码,我不能控制在外部过程中,以保护我的主要应用程序免受它展示的讨厌的错误。 我的父进程正在监视其他进程,并在失败时做“正确的事情(tm)”。

我的问题是,沃森博士仍然在检测孤立进程中的崩溃,并在下降的过程中附加到崩溃转储。 这有两个问题:1.大大减缓了我所需要的检测失败的时间,因为在进行崩溃转储时,进程保持活跃状态​​。 2.向用户显示恼人的popup窗口,询问他们是否要向微软提交错误报告。

显然,我宁愿修复subprocess中的错误,但鉴于它不是一个选项,我希望能够select性地禁用该过程的Dr.Watson(和Vista错误报告)。

我正在运行一些我自己的代码在交付到不可信任的位之前,所以如果有一个我可以调用的API会影响当前的进程,那很好。

我知道: http : //support.microsoft.com/default.aspx/kb/188296这将禁用整个机器的Dr.Watson。 我不想这样做,因为这会让我成为一个糟糕的公民来摧毁整个机器的环境。

我也意识到Vista +中的WerSetFlags选项似乎会禁用当前进程的Windows错误报告,但是我需要在早期的操作系统版本上禁用Dr.Watson的东西。

您要禁用GPF弹出窗口: http : //blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx

当一个进程没有处理某个异常时,好医生被调用。 因此,通常的做法是自己处理所有的例外情况。 在你的情况下,这是非常困难的,因为你不拥有崩溃的过程代码。 你可以做的是在运行时将你的代码注入到另一个进程中,并安装一个异常处理程序来吞噬导致崩溃的异常。 被抓到时,优雅地关闭过程。

这里有很多关于将代码注入另一个进程的问题。 至于崩溃处理程序,您可以设置一个未处理的异常过滤器 ,或添加一个向量的异常处理程序 。 请注意,对于后者,您必须小心,不要吞下事实上在其他进程中处理的合法异常,也就是找到一种方法来识别崩溃的异常,并确保它是您处理的唯一异常。