【问题标题】:disable crashed application dialog for invoked process为调用的进程禁用崩溃的应用程序对话框
【发布时间】:2016-05-04 13:25:10
【问题描述】:

我从应用程序启动一个进程来监视它。 它可能会崩溃或挂起。

监控应用程序已为此做好准备并可以处理。

但在崩溃窗口上显示应用程序崩溃对话框。 此时崩溃的进程仍在进程列表中。 但如果进程将被监控应用程序终止(在TerminateProcess 超时后),对话框不会消失。

我尝试使用 WerAddExcludedApplicationWerRemoveExcludedApplication 禁用此应用程序的 Windows 错误报告,但这只会删除在线搜索解决方案的选项。

我也不想完全禁用 WER。

是否有另一种方法可以通过编程方式为给定的可执行文件禁用此对话框(它并不总是相同)?

【问题讨论】:

  • SetErrorMode是继承的,所以在启动child之前设置parent的error mode为SEM_NOGPFAULTERRORBOX
  • 更改 ErrorMode 设置不会改变任何内容。

标签: winapi windows-7 windows-error-reporting application-monitoring


【解决方案1】:

我认为您正在寻找的是DontShowUI 注册表项。这将使 Windows 错误报告 (WER) 保持启用状态,并且不会在未处理的异常上弹出任何内容。

DontShowUI (REG_DWORD) 可能的值:

0 - 用户界面(默认)

1 - 无 UI(启用或禁用 WER UI)

WER 注册表设置链接:https://msdn.microsoft.com/en-us/library/windows/desktop/bb513638(v=vs.85).aspx

您可以在此处的注册表中进行设置(或在 HKEY_CURRENT_USER 中):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]
"DontShowUI"=dword:00000001

如果您设置了这个键并且仍然看到一个关于未处理异常的对话框,我建议您在注册表中搜索任何 Value = DontShowUI,因为我有时会发现它们设置在奇怪的地方(并且被 Windows 尊重)。

【讨论】:

  • 这是针对本地问题的全局解决方案。
  • 我和 Raymond Chen 一起讨论这个问题。我真的不想改变全局系统行为。我也在我的问题中说明了这一点。
  • 明白。在这种情况下,我想不出很好的解决方案。您可以在执行期间的特定时间设置和取消设置该注册表项,但这是一种解决方法,并不是一个很好的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多