如何在Windows Vista上禁用"调试/关闭应用程序"对话框?

Chr*_*ith 83 windows testing crash-reports windows-vista windows-error-reporting

当应用程序在Windows上崩溃并且安装了Visual Studio等调试程序时,将显示以下模式对话框:

[标题:Microsoft Windows]

X已停止工作

一个问题导致程序停止正常工作.Windows将关闭程序并在解决方案可用时通知您.

[调试] [关闭申请]

有没有办法禁用此对话框?也就是说,让程序崩溃并无声地刻录?

我的情况是我想运行几个自动化测试,其中一些将因测试中的应用程序中的错误而崩溃.我不希望这些对话框停止自动化运行.

搜索我认为我已经找到了在Windows XP上禁用此功能的解决方案,这是修改此注册表项:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

但是,这在Windows Vista上不起作用.

Nic*_*icJ 54

要强制Windows错误报告(WER)进行故障转储并关闭应用程序,而不是提示您调试程序,您可以设置这些注册表项:

Windows Registry Editor Version 5.00

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\Consent]
"DefaultConsent"=dword:00000001
Run Code Online (Sandbox Code Playgroud)

设置完成后,当您的应用程序崩溃时,您应该看到*.hdmp和*.mdmp文件:

%ALLUSERSPROFILE%\Microsoft\Windows\WER\
Run Code Online (Sandbox Code Playgroud)

  • 更好的答案(同样重要的问题):http://stackoverflow.com/a/3637710/195755 (7认同)
  • DefaultConsent = 1似乎是默认值.DontShowUI怎么样? (3认同)
  • @NicJ请在你的答案中添加DontShowUI = 1,这是必不可少的 (2认同)
  • Windows 注册表编辑是通往 IT 地狱的道路,最好考虑来自 armenzg 的答案 (2认同)

小智 45

看这里:

http://msdn.microsoft.com/en-us/library/bb513638.aspx

注册表编辑器

DWORD HKLM或HKCU\Software\Microsoft\Windows\Windows错误报告\ DontShowUI ="1"

会让WER默默地报道.然后你可以设置

DWORD HKLM或HKCU\Software\Microsoft\Windows\Windows错误报告\禁用="1"

阻止它与MS交谈.


Luk*_*ane 35

我不确定这是否指的是完全相同的对话框,但这是Raymond Chen的另一种方法:

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
Run Code Online (Sandbox Code Playgroud)

  • 我对SetErrorMode和SEM_NOGPFAULTERRORBOX标志的问题是它不会创建转储文件并在Windows事件日志中创建一个条目.当程序崩溃时,你的程序就会消失得无影无踪.出于这个原因,我认为注册表解决方案更好. (2认同)

arm*_*nzg 27

我不得不禁用这个用于Firefox的Windows 64位的发布自动化工作,我做了以下事情:

  • 输入gpedit.msc
  • 计算机配置 - >管理模板
  • Windows组件 - > Windows错误报告
  • 将"防止显示关键错误的用户界面"设置为"已启用"

它类似于客户体验报告所完成的内容:http: //www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm


Gea*_*phy 12

在我的上下文中,我只想抑制单元测试的弹出窗口,而不是整个系统.我发现需要一组函数来抑制这些错误,例如捕获未处理的异常,抑制运行时检查(例如堆栈指针的有效性)和错误模式标志.这是我用过的一些成功:

#include <windows.h>
#include <rtcapi.h>
int exception_handler(LPEXCEPTION_POINTERS p)
{
    printf("Exception detected during the unit tests!\n");
    exit(1);
}
int runtime_check_handler(int errorType, const char *filename, int linenumber, const char *moduleName, const char *format, ...)
{
    printf("Error type %d at %s line %d in %s", errorType, filename, linenumber, moduleName);
    exit(1);
}

int main()
{
    DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
    SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&exception_handler); 
    _RTC_SetErrorFunc(&runtime_check_handler);

    // Run your tests here

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


小智 8

在WPF应用程序中

[DllImport("kernel32.dll", SetLastError = true)]
static extern int SetErrorMode(int wMode);

[DllImport("kernel32.dll")]
static extern FilterDelegate SetUnhandledExceptionFilter(FilterDelegate lpTopLevelExceptionFilter);
public delegate bool FilterDelegate(Exception ex);

public static void DisableChashReport()
{
 FilterDelegate fd = delegate(Exception ex)
 {
  return true;
 };
 SetUnhandledExceptionFilter(fd);
 SetErrorMode(SetErrorMode(0) | 0x0002 );
}
Run Code Online (Sandbox Code Playgroud)