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


160

使用Visual Studio 2008或2010时,每次附加到IIS w3wp.exe时,您都会收到“附加安全警告”,

您如何看待?

也很高兴知道如何保持它的持久性,因为这似乎会在一段时间后超时。

顺便说一句:我将此添加为对下面答案的注释,我所做的第一件事是尝试msdn文章 http://msdn.microsoft.com/en-us/library/ms241736.aspx,但这不起作用。


1
直到最近,这在VS2015中一直有效-我确实关闭了所有VS实例,并且设置了键,但是警告再次弹出。
fastmultiplication

Answers:


231

也可以在Tzury提到的文章中找到,但总结一下此线程中的答案:

确保更改注册表项时Visual Studio未运行,否则在退出时会被旧值覆盖

将以下注册表项更改(或创建)为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. 确保Visual Studio未运行,然后打开注册表编辑器。
  2. 导航到 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\Debugger,右键单击并创建一个新的DWORD
    • 名称: DisableAttachSecurityWarning
    • 值:1

更新:如果您不想打开regedit,请将此要点另存为* .reg文件并运行(导入低于VS2017的所有VS版本的密钥)。

Visual Studio 2017

配置保存在专用注册表位置,请参见以下答案:https : //stackoverflow.com/a/41122603/67910

对于VS 2017,将此要点另存为* .ps1文件并以admin身份运行,或者将以下代码复制并粘贴到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
}

10
对于VS2012,密钥为HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0 \ Debugger \ DisableAttachSecurityWarning
maddoxej 2012年

17
@ImranRizvi,您需要确保在更改注册表时仍未运行,否则它将在退出时被旧值覆盖
Wiebe Tijsma 2013年

4
VS 2017呢?调试器密钥完全丢失(大多数丢失)
Adaptabi

4
看起来Visual Studio 2017保留本地注册表,因此您必须更改此文件而不是全局注册表。我修复了“仅编辑此本地注册表文件”的“附加安全警告”的问题。阅读此答案以获取更多说明:stackoverflow.com/a/41122603/692665
Ceridan

1
@TravisK,基本上默认情况下您没有此键,并且这种情况等于使该键的值等于零。在您的情况下,您应该在“调试器”部分中手动添加具有DisableAttachSecurityWarning键且Value等于1的新DWORD。完成后,只需卸载私有注册表,现在就可以运行MSVS并对其进行测试。
塞里丹(Ceridan)'17

13

注册表设置确实起作用;但是,必须确保在VS2005 / 2008的32位注册表沙箱中对其进行设置,方法是在中使用32位regedit.exe %windir%\SysWOW64\或在下添加它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等。

注意:Windows 7上的regedit似乎希望将.reg文件另存为UTF16-LE,因此,如果将其保存为.reg文件,请注意,您需要这样做。


8

我能够使其在Windows 7上运行。我首先在VS2008仍打开的情况下更改了注册表值。然后关闭它并刷新注册表编辑器,并注意到该值已重置为0。然后我将其更改回1并启动VS2008。现在可以正常工作了。我试图关闭VS2008并将其重新打开,并且注册表值保持为1。感谢您的帮助


7

这篇文章中的其他答案包含正确的信息,但是我无法使其正常工作,因此这是尝试使答案非常明确。这些说明适用于在Windows 7 Ultimate 64位上运行的Visual Studio 2010。

  • 确保没有任何Visual Studio实例在运行(使用任务管理器检查devenv.exe
  • 将DWORD DisableAttachSecurityWarning注册表值添加到HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ XX \ Debugger并将其设置为1。对于Visual Studio 2008,将XX替换为9.0,对于2010使用10.0

我之所以努力工作,是因为我尝试使用HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER。我不得不求助于使用Process Monitor和对devenv的一些过滤来识别我的错误。我怀疑HKLM值只有在第一次打开Visual Studio之前被设置才有任何影响。

关闭时,Visual Studio的任何打开的实例都将覆盖您的更改,并且在任何情况下,只有新实例才能使用该设置。

据我所知,似乎不需要使用Wow6432Node注册表。以下Powershell命令将适用于Visual Studio 2010的步骤。

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

6

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


1
最近,我被这个“功能”所咬,当您的答案使我意识到这是因为我只是一个实际的用户帐户切换到了apppoolidentity ,这是我以前从未见过的。
drzaus 2015年


4

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

  • 安装重新连接扩展
  • 使用“重新附加”进行附加并绕过邮件
  • 重新附加(Ctrl-R + Ctrl- [1-5])到先前的过程具有相同的好处

3

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

2

因此,对我而言,在x64 / Win7上使用Visual Studio 2010唯一适用的方法是更新两个节点,包括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


0

一个PowerShell的基础上,从SliverNinja和马丁·霍林斯沃思已有答案的变化。已在win7 / x64环境下使用Visual Studio 2015 对它进行了测试。该脚本将要求您关闭Visual Studio是否正在运行(不会尝试终止它)。

$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!"
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.