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

标签 windows drwatson windowserror

我有一个应用程序托管了一些不稳定的第三方代码,我无法在外部进程中控制这些代码,以保护我的主应用程序免受它所显示的严重错误的影响。我的父进程正在监视另一个进程并在它失败时做“正确的事情 (tm)”。

我遇到的问题是 Dr. Watson 仍在检测隔离进程中的崩溃并附加到正在下降的进程以进行故障转储。这有两个问题: 1. 大大减慢了我检测到故障所需的时间,因为在获取故障转储时进程保持事件状态。 2. 向用户显示烦人的弹出窗口,询问他们是否要将错误报告提交给 Microsoft。

显然,我更愿意修复子进程中的错误,但考虑到这不是一个选项,我希望能够有选择地为该进程禁用 Dr. Watson(以及 Vista+ 中的 Windows 错误报告)。

在移交给不受信任的位之前,我在流程中运行了一些我自己的代码,所以如果有一个我可以调用的 API 会影响当前流程,那就没问题了。

我知道:http://support.microsoft.com/default.aspx/kb/188296这将禁用整个机器的 Dr. Watson。我不想这样做,因为破坏机器范围的设置会让我成为坏公民。

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

最佳答案

当进程没有处理某个异常时调用好医生。因此,通常的做法是自己处理所有异常。就您而言,这要困难得多,因为您不拥有崩溃的流程代码。然后你可以做的是在运行时将你的代码注入(inject)到另一个进程中,并安装一个异常处理程序来吞下导致崩溃的异常。当被捕获时,优雅地关闭进程。

这里有很多关于将代码注入(inject)另一个进程的问题。至于崩溃处理程序,您可以 set an unhandled exception filter , 或 add a vectored exception handler .请注意,对于后者,您必须小心不要吞下实际上在另一个进程中处理的合法异常,即找到一种方法来识别崩溃异常并确保它是您处理的唯一异常。

关于windows - 为我的进程禁用 Windows 错误报告 (Dr. Watson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1134343/

相关文章:

c - ShellExecute 挂起模式

crash - 哪种崩溃会在​​ Windows XP 上产生应用程序错误(又名应用程序弹出窗口)?

python - 无法使用 os.remove 删除文件夹(WindowsError : [Error 5] Access is denied: 'c:/temp/New Folder' )

python - "WindowsError: exception: access violation..."- ctypes 问题

windows - PE文件中section和数据目录是什么关系?

windows - 如何使用 NAudio 获取当前使用 powershell 播放音频的应用程序的名称?

debugging - Windows 2008+ 的 Dr. Watson 替代品?

c++ - ds :0023:003a3000=? 是什么? drwatson FAULT 末尾的东西?

python - 如何避免 "WindowsError: [Error 5] Access is denied"

windows - 想学习Windows编程,有什么建议吗?