use*_*uld 8 registry windows-server-2003
问题: 我需要禁用控制台应用程序的崩溃调试提示.
背景: 我们有一个应用程序可以与第三方同步信息,因为第三方在一天中的某些时间因连接问题而崩溃.我们无权访问源代码以正确捕获错误,因此我只需要应用程序失败并再试一次.我有另一个应用程序监视我们的同步工具,以确保它正在运行.
当同步应用程序崩溃时,会出现需要用户交互的调试提示.因为它停留在屏幕上,所以应用程序永远不会停止运行.结果,"健康检查"从未知道失败.
我大约2年前做过这个,但对于我的生活,我无法记住文章或所需的注册表路径.
谢谢,Brian
操作系统: Windows 2003 Server 应用程序类型: .NET 3.5控制台应用程序
FIX:发现者:John Knoeller
删除以下键
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
可能这个?
注册表项是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
Run Code Online (Sandbox Code Playgroud)
删除整个键似乎太"锤"的方法.
首先,可以使用Windows API函数SetErrorMode和/或SetThreadErrorMode.它们也可以从.NET应用程序中进行PInvoked.
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
Run Code Online (Sandbox Code Playgroud)
其次,自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
向AutoExclusionList子项添加REG_DWORD值,其中名称是可执行文件的名称,值为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
| 归档时间: |
|
| 查看次数: |
9012 次 |
| 最近记录: |