调试 IIS 时关闭 VisualStudio 附加安全警告

使用 VisualStudio2008或2010时,每次附加到 IISw3wp.exe 时,都会收到附加安全警告:

Attach Security Warning

你怎么把这个翻过来的?

如果能知道如何将它保持更长时间的连接,那将是很酷的,因为这似乎会在一段时间后超时。

此外,我也试过微软文档页面 安全警告: 附加到不受信任的用户拥有的进程可能是危险的,但它不工作

38055 次浏览

你的答案可以在 http://msdn.microsoft.com/en-us/library/ms241736.aspx找到

如果正在调试合法的 引起此警告的 出现,并想要抑制它,在那里 是一个注册表设置,允许您 记住重新启用 完成后发出警告 场景。

也可以在 Tzury 提到的文章中找到,但是总结一下这个帖子的答案:

确保在更改注册表项时 VisualStudio 未运行,否则退出时将使用旧值覆盖它

Visual Studio 2022 : 按照 这些指示,然后重新启动。
Visual Studio 2019 : 按照 这些指示,然后重新启动。

对于较早版本的 VisualStudio:

将以下注册表项更改(或创建)为 1:

Visual Studio 2008 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Debugger\DisableAttachSecurityWarning

Visual Studio 2010 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger\DisableAttachSecurityWarning

Visual Studio 2012 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Debugger\DisableAttachSecurityWarning

Visual Studio 2013 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\Debugger\DisableAttachSecurityWarning

Visual Studio 2015 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\Debugger\DisableAttachSecurityWarning

对于 VS2015,您可能需要创建上面引用的注册表项。

  1. 确保 VisualStudio 未运行,然后打开注册表编辑器。
  2. 导航到 右键单击并创建一个新的 DWORD:
  • 姓名: DisableAttachSecurityWarning
  • 价值: 1

更新: 如果您不想打开 regedit,请将此 大意保存为 * 。Reg 文件并运行它(导入所有低于 VS2017的 VS 版本的密钥)。

Visual Studio 2017

配置保存在一个私有注册表位置,请参阅这个答案: https://stackoverflow.com/a/41122603/67910

对于 VS 2017,将此 大意保存为 * 。Ps1文件并作为管理员运行,或者将下面的代码复制粘贴到 ps1文件中:

#IMPORTANT: Must be run as admin


dir $env:LOCALAPPDATA\Microsoft\VisualStudio\15.* | % {
#https://stackoverflow.com/a/41122603
New-PSDrive HKU Registry HKEY_USERS


reg load 'HKU\VS2017PrivateRegistry\' $_\privateregistry.bin


$BasePath='HKU:\VS2017PrivateRegistry\Software\Microsoft\VisualStudio'


$keysResult=dir $BasePath
$keysResult | ? {$_.Name -match '\\\d+\.\d+_[^_]+$'} | % {
$keyName = $_.Name -replace 'HKEY_USERS','HKU:'
New-ItemProperty -Path $keyName\Debugger -Name DisableAttachSecurityWarning -Value 1
}
$keysResult.Handle.Close()


[gc]::collect()


reg unload 'HKU\VS2017PrivateRegistry'


Remove-PSDrive HKU
}

我能让它在 Windows 7上工作。我首先在 VS2008仍然打开的情况下更改了注册表值。然后我关闭它,刷新注册表编辑器,并注意到该值被重置为0。然后我将它改回1并启动 VS2008。现在可以用了。我尝试关闭 VS2008并重新打开它,注册表值保持为1。谢谢你的帮助

注册表设置可以工作; 但是,您必须确保在 VS2005/2008的32位注册表沙箱中设置它,方法是使用 %windir%\SysWOW64\中的32位 regedit. exe 或将其添加到 HKLM\Software\Wow6432Node\...下。我创造了一个。Reg 脚本,简单地将其添加到两者:

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Debugger]
"DisableAttachSecurityWarning"=dword:00000001


[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Debugger]
"DisableAttachSecurityWarning"=dword:00000001

只需将2005年的版本更改为8.0,2010年的版本更改为10.0,等等。

注意: 在 Windows7上的 regedit 似乎需要。Reg 文件保存为 UTF16-LE,因此如果将其保存为。注册文件,请注意您需要这样做。

在这篇文章中的其他答案包含正确的信息,但我有问题让它的工作,所以这是一个尝试,使答案非常明确。这些说明适用于运行在 Windows7终极64位上的 VisualStudio2010。

  • 确保没有运行 VisualStudio 实例(使用任务管理器检查 Devenv.exe)
  • 将 DWORD 禁用附件安全警告注册表值添加到 MicrosoftVisualStudioX.X 调试器,并将该值设置为 1。对于 Visual Studio 2008,将 X.X 替换为 9.0,对于2010,使用 10.0

我之所以努力让这个工作是因为我正在尝试使用 HKEY _ LOCAL _ MACHINE 而不是 HKEY _ CURRENT _ USER。我不得不使用 过程监察和一点对 devenv 的过滤来识别我的错误。我怀疑 HKLM 值只有在您第一次打开 VisualStudio 之前进行设置时才会有任何影响。

VisualStudio 的任何打开实例在关闭时都会覆盖您的更改,并且在任何情况下都只有新实例会选择该设置。

就我所知,使用 节点注册表似乎是没有必要的。下面的 Powershell 命令将应用 VisualStudio2010的步骤。

Get-Process -Name devenv* | ForEach-Object { Stop-Process $_.Id }
New-ItemProperty -Path 'HKCU:\Software\Microsoft\VisualStudio\10.0\Debugger' -Name 'DisableAttachSecurityWarning' -Value 1 -PropertyType 'DWORD' -Force

因此,在 x64/Win7上使用 VisualStudio2010的唯一方法是更新两个节点,包括 Wow6432Node。

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger]
"DisableAttachSecurityWarning"=dword:00000001


[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\10.0\Debugger]
"DisableAttachSecurityWarning"=dword:00000001

您可以将 iis AppPool 标识更改为您的实际 Windows 用户(如果它是本地计算机)。

Powershell 变体... 将 $vsversion替换为您想要应用它的版本。

注意 : 在运行此命令之前保存您的工作。将停止所有正在运行的 VS 实例。如果您不结束打开 VS 实例-该值将不会被保留。

$vsversion = "12.0" # VS 2013 (optionally 11, 10, 9, etc.)
kill -name devenv # end any existing VS instances (required for persisting config change)
Get-ItemProperty -Path "HKCU:\Software\Microsoft\VisualStudio\$vsversion\Debugger" -Name DisableAttachSecurityWarning -ErrorAction SilentlyContinue # query value (ignore if not exists)
Set-ItemProperty -Path "HKCU:\Software\Microsoft\VisualStudio\$vsversion\Debugger" -Name DisableAttachSecurityWarning -Value 1 # assign value

基于 SliverNinja 和 Martin Hollingsworth 现有答案的 强力弹变体。这已经在 Win7/x64环境中用 Visual Studio 2015进行了测试。如果 VisualStudio 正在运行,该脚本将要求您关闭它(不会尝试杀死它)。

$vsversion = "14.0" # VS 2015 (optionally 12, 11, 10, 9, etc...)
$disable = 1 # set to 0 to enable the warning message


# not using Get-Process here because powershell instance can be 64 bit and devenv is 32 bit
if (!(get-wmiobject win32_process -filter "name='devenv.exe'")) {
# Create or (force) update the property
New-ItemProperty -Path "HKCU:\Software\Microsoft\VisualStudio\$vsversion\Debugger" -Name DisableAttachSecurityWarning -Value $disable -PropertyType 'DWORD' -Force
Write-Host Done!
}
else {
Write-Error "Please close Visual Studio first!"
}

这并不是对这个问题的直接回答,但是它绕过了安全信息,并且提供了一种附加到先前附加的进程的更快的方法:

  • 安装 重新接上分机
  • 使用“重新连接”连接,则绕过消息
  • 将(Ctrl-R + Ctrl-[1-5])重新附加到以前的进程也有同样的好处

Visual Studio 扩展可用于 VS2015和 VS2017: “依附于所有事物”:

enter image description here

您可以使用通常的过程将“ AttachToIIS”绑定到您喜欢的任何键和弦。