问题: 我需要禁用控制台应用程序的崩溃调试提示。
背景 我们有一个应用程序可以与第三方同步信息,因为第三方在一天中的某些时间遇到连接问题而崩溃。我们无权访问源代码以正确捕获错误,因此我只需要应用程序失败并再试一次。我有另一个应用程序监视我们的同步工具,以确保它正在运行。
当同步应用程序崩溃时,会出现需要用户交互的调试提示。因为它停留在屏幕上,所以应用程序永远不会停止运行。结果是“健康 检查“永远不知道失败。”
我大约2年前做过这个,但是对于我的生活,我无法记住文章或所需的注册表路径。
谢谢, 布赖恩
操作系统:Windows 2003 Server 应用程序类型: .NET 3.5控制台应用程序
FIX:发现:John Knoeller
删除以下键
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\窗户 NT \ CURRENTVERSION \的AeDebug \调试 HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ .NETFramework \ DbgManagedDebugger
答案 0 :(得分:9)
可能是这个?
How to: Enable/Disable Just-In-Time Debugging
注册表项是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
答案 1 :(得分:6)
删除整个键似乎也是"锤子"做法。
首先,可以使用Windows API函数SetErrorMode
和/或SetThreadErrorMode
。它们也可以从.NET应用程序中获取。
PInvoke的相关签名是:
public enum ErrorMode : uint
{
SEM_DEFAULT = 0x0000,
SEM_FAILCRITICALERRORS = 0x0001,
SEM_NOGPFAULTERRORBOX = 0x0002,
SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
SEM_NOOPENFILEERRORBOX = 0x8000
}
[DllImport("Kernel32.dll")]
public static extern ErrorMode SetErrorMode(ErrorMode mode); //available since XP
[DllImport("Kernel32.dll")]
public static extern ErrorMode GetErrorMode(); //available since Vista
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetThreadErrorMode(ErrorMode newMode, out ErrorMode oldMode); //available since Windows 7
[DllImport("Kernel32.dll")]
public static extern ErrorMode GetThreadErrorMode(); //available since Windows 7
其次,自Vista以来,有一个更具体的基于注册表的解决方案:
仅从调试中排除此应用程序。见:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb204634(v=vs.85).aspx
复制粘贴:
从自动调试中排除应用程序
以下过程介绍了在AeDebug
键下的自动值设置为1后如何从自动调试中排除应用程序。
- >从自动调试中排除应用程序
转到以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
将REG_DWORD值添加到AutoExclusionList
子项,其中名称是可执行文件的名称,值为1。
默认情况下,桌面窗口管理器(Dwm.exe)被排除在自动调试之外,否则如果Dwm.exe停止响应会导致系统死锁(用户无法看到调试器显示的界面,因为Dwm .exe没有响应,Dwm.exe无法终止,因为它由调试器保存。)
Windows Server 2003和Windows XP: AutoExclusionList子项不可用;因此,您不能从自动调试中排除任何应用程序,包括Dwm.exe。
默认的AeDebug注册表项可以表示如下:
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows NT
CurrentVersion
AeDebug
Auto = 1
AutoExclusionList
DWM.exe = 1
答案 2 :(得分:2)
John作为.reg文件的解决方案(我们需要将其推广到构建服务器集群):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Debugger"=-
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"DbgManagedDebugger"=-