当应用程序在Windows上崩溃且安装了Visual Studio等调试程序时,会出现以下模式对话框:
[标题:Microsoft Windows]
X已停止工作
问题导致程序停止 工作正常。 Windows将关闭 该计划并通知您是否 解决方案可用。
[调试] [关闭申请]
有没有办法禁用此对话框?也就是说,让程序崩溃并无声地刻录?
我的情况是我想运行几个自动化测试,其中一些会因测试中的错误而崩溃。我不希望这些对话框停止自动化运行。
搜索我认为我已经找到了在Windows XP上禁用此功能的解决方案,这是修改此注册表项:
HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger
但是,这在Windows Vista上无效。
答案 0 :(得分: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
设置完成后,当您的应用程序崩溃时,您应该看到* .hdmp和* .mdmp文件:
%ALLUSERSPROFILE%\Microsoft\Windows\WER\
答案 1 :(得分: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交谈。
答案 2 :(得分:35)
我不确定这是否指的是完全相同的对话框,但这是Raymond Chen的替代方法:
DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
答案 3 :(得分:27)
我必须禁用此功能才能在Windows 64位上为Firefox发布自动化工作,并且我执行了以下操作:
与以下客户体验报告所完成的类似: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm
答案 4 :(得分: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;
}
答案 5 :(得分: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 );
}
答案 6 :(得分:4)
您必须实现一个未处理的异常过滤器,它只是退出您的应用程序,然后使用SetUnhandledExceptionFilter()设置该过滤器功能。
如果您正在使用安全CRT,则还必须提供自己的无效参数处理程序,并使用_set_invalid_parameter_handler()进行设置。
此博文也有一些信息: http://blog.kalmbachnet.de/?postid=75
答案 7 :(得分:4)
在测试期间,您可以使用'debugger' like ADPlus attached运行,可以通过许多有用的方式配置它来收集错误数据(小型转储),同时防止您在上面说明的模态对话框问题。
如果您想在应用程序崩溃时获取一些有用的信息,可以配置Microsoft Error reporting以获得类似于ADPlus数据的内容。
答案 8 :(得分:4)
这不是问题的直接答案,因为这是一种解决方法,问题是关于如何禁用该功能,但在我的情况下,我是权限有限的服务器上的用户,无法禁用该功能使用其他答案之一。所以,我需要一个解决方法。这可能对至少其他一些最终解决这个问题的人有用。
我使用autohotkey portable创建了一个宏,每分钟检查弹出框是否存在,如果存在,单击按钮关闭程序。在我的情况下,这就足够了,并为其他用户留下了这个功能。它要求我在运行风险程序时启动脚本,但它可以满足我的需求。
脚本如下:
sleep_duration = 60000 ; how often to check, in milliseconds.
; 60000 is a full minute
Loop
{
IfWinExist, ahk_class #32770 ; use autohotkey's window spy to confirm that
; ahk_class #32770 is it for you. This seemed to be consistent
; across all errors like this on Windows Server 2008
{
ControlClick, Button2, ahk_class #32770 ; sends the click.
; Button2 is the control name and then the following
; is that window name again
}
Sleep, sleep_duration ; wait for the time set above
}
编辑:快速标记。当其他事情发生时,这似乎试图在前台窗口中激活控件 - 它应该在后台发送给程序。如果我找到修复程序,我会编辑此答案以反映它,但是现在,请谨慎使用它并尝试同时在计算机上执行其他工作。
答案 9 :(得分:3)
在尝试了互联网上的其他所有内容以摆脱时间调试器之后,我发现了一种实际工作的简单方法,我希望能帮助其他人。
转到“控制面板” 转到“管理工具” 转到服务 查看Machine Debug Manager列表 右键单击它,然后单击“属性” 在“常规”选项卡下,查找“启动类型” 单击“禁用”。 单击“应用”和“确定”。
我从未见过调试器消息,并且我的计算机运行正常。
答案 10 :(得分:1)
您可以完全禁用Windows Server 2008 R2,Windows Server 2012和Windows 8上的错误报告,而不是更改注册表中的值:serverWerOptin /disable
https://technet.microsoft.com/en-us/library/hh875648(v=ws.11).aspx