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

[标题:微软Windows]

X 已停止工作

问题导致该程序停止正确工作。Windows将关闭程序并通知您是否有解决方案。

[调试][关闭应用程序]

有没有办法禁用这个对话框?也就是说,程序是否会悄无声息地崩溃并烧毁?

我的情况是,我想运行几个自动化测试,其中一些测试会由于被测应用程序中的错误而崩溃。我不希望这些对话框阻碍自动化运行。

四处搜索,我想我已经找到了在 Windows XP 上禁用此功能的解决方案,该解决方案会删除此注册表项:

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

然而,这在 Windows Vista 上不起作用。

有帮助吗?

解决方案

要强制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://msdn.microsoft.com/en-us/library/ bb513638.aspx

注册表编辑器

DWORD HKLM或HKCU \ SOFTWARE \微软\的Windows \ Windows错误报告\ DontShowUI = “1”

将WER默默的报告。然后就可以设置

DWORD HKLM或HKCU \ SOFTWARE \微软\的Windows \ Windows错误报告\禁用= “1”

从谈话到MS停止它。

我不知道这是否指的是完全一样的对话框,但这里是从的雷蒙德陈

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

我必须禁用此功能才能在 Windows 64 位 Firefox 上进行发布自动化工作,并且执行了以下操作:

  • gpedit.msc
  • 计算机配置 -> 管理模板
  • Windows 组件 -> Windows 错误报告
  • 将“防止显示严重错误的用户界面”设置为启用

这与客户体验报告的完成情况类似:http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm

在我的背景,我只是想抑制弹出我的单元测试,而不是整个系统。我发现功能的结合,需要为了抑制这些错误,如捕捉未处理的异常,抑制运行时检查(如堆栈指针的有效性)和误差模式标志。这就是我取得了一些成功使用的:

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

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

您必须实现未处理的异常过滤器,只需退出你的应用程序,然后设定的 SetUnhandledExceptionFilter()

如果您使用的是安全的CRT,你还必须提供自己的参数无效处理程序,并设置该用的 _ set_invalid_parameter_handler ()。

本博客文章有一些信息是如此: http://blog.kalmbachnet.de/?postid=75

这不是问题的直接答案,因为这是一种解决方法,问题是如何禁用该功能,但就我而言,我是权限有限的服务器上的用户,无法使用以下方法之一禁用该功能其他答案。所以,我需要一个解决方法。这可能至少对其他一些最终解决这个问题的人有用。

我用了 自动热键便携式 并创建了一个宏,每分钟检查一次弹出框是否存在,如果存在,则单击按钮关闭程序。就我而言,这就足够了,并为其他用户保留该功能。它要求我在运行有风险的程序时启动脚本,但它可以满足我的需要。

脚本如下:

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
}

编辑: 一个快速的旗帜。当其他事情发生时,这似乎试图激活前台窗口中的控件 - 它应该将其发送到后台的程序。如果我找到修复程序,我将编辑此答案以反映它,但现在,请谨慎使用此答案并尝试同时在计算机上执行其他工作。

乱投医在互联网上其他人摆脱只是在时间调试后,我发现,实际工作的简单方法,希望可以帮助别人。

转到控制面板 转到管理工具 转到服务 往下看名单计算机调试管理器 右键点击它,然后单击属性 在常规选项卡,找到启动类型设置 点击禁用。 点击应用和确定。

我还没有看到因为调试消息,以及我的计算机是完全运行状态。

除了更改注册表中的值,你可以完全地禁用的Windows Server 2008 R2,Windows Server上的错误报告2012和Windows 8:serverWerOptin /disable

https://technet.microsoft。 COM / EN-US /库/ hh875648(v = ws.11)的.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top