当我在Windows 10之前的Windows版本中工作时,我能够在启动特定可执行文件时调用调试器。为此,我创建了以下批处理文件:
@echo off
>%temp%\output.reg echo Windows Registry Editor Version 5.00
>>%temp%\output.reg echo+
>>%temp%\output.reg echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regsvr32.exe]
>>%temp%\output.reg echo "debugger"="vsjitdebugger.exe"
regedit /s %temp%\output.reg
del %temp\output.reg
为了阻止它我用过:
@echo off
>%temp%\output.reg echo Windows Registry Editor Version 5.00
>>%temp%\output.reg echo+
>>%temp%\output.reg echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regsvr32.exe]
>>%temp%\output.reg echo "debugger"=-
regedit /s %temp%\output.reg
del %temp\output.reg
当然这些文件专门用于regsvr32.exe
。我有其他可执行文件。
但是,在Windows 10下使用此技巧时,它无法正常工作。我会得到错误:
启动'regsvr32“my.dll”'时出错:
未通知Visual Studio即时调试程序应用程序正确启动。
有关详细信息,请查看“即时调试,错误”的文档索引。
我不知道它指的是什么文档索引,但我认为它是一些权限问题,所以我试图将vsjitdebugger.exe
文件上的设置更改为Run this program as an administrator
,我得到了一个不同的错误对话框,其中说:
C:\ WINDOWS \ SYSTEM32 \ REGSVR32.EXE
请求的操作需要提升。
现在,如果我要打开Administrator cmd窗口并使用以下命令:
vsjitdebugger.exe regsvr32 "my.dll"
这会在启动regsvr32.exe
应用程序时调用调试器。但是,这个技巧的关键是确保在任何执行应用程序时调用调试器,这可能不在我控制的cmd进程下。
所以我有2个问题。
我遇到过同样的问题。不明白为什么,但显然在Windows 10上有必要在注册表中配置一些东西,据我记得以前没有必要,或者可能在安装Visual Studio时自动发生。
在注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
中,添加一个名为“Auto”的键,其类型为“String”,值为“1”。
编辑:这里提到“故障排除”:https://docs.microsoft.com/en-us/visualstudio/debugger/debug-using-the-just-in-time-debugger#jit_errors