当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《如何在WindowsVista上禁用"调试/关闭应用程序"对话框?》经验,为你挑选了6个好方法。

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

[标题:Microsoft Windows]

X已停止工作

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

[调试] [关闭申请]

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

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

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

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

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



1> NicJ..:

要强制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

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

%ALLUSERSPROFILE%\Microsoft\Windows\WER\


更好的答案(同样重要的问题):http://stackoverflow.com/a/3637710/195755
DefaultConsent = 1似乎是默认值.DontShowUI怎么样?
@NicJ请在你的答案中添加DontShowUI = 1,这是必不可少的

2> 小智..:

看这里:

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交谈.



3> Luke Quinane..:

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

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);


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

4> 小智..:

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

输入gpedit.msc

计算机配置 - >管理模板

Windows组件 - > Windows错误报告

将"防止显示关键错误的用户界面"设置为"已启用"

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



5> Gearoid Murp..:

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

#include 
#include 
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;
}



6> 小智..:

在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 );
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有