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

Posted

技术标签:

【中文标题】调试 IIS 时关闭 Visual Studio 附加安全警告【英文标题】:Turn off Visual Studio Attach security warning when debugging IIS 【发布时间】:2009-09-12 09:59:33 【问题描述】:

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

你是怎么解决这个问题的?

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

另外,我已经尝试过 Microsoft Docs 页面 Security Warning: Attaching to a process owned by an untrusted user can be dangerous,但没有成功

【问题讨论】:

这一直有效,直到最近,在 VS2015 中 - 我肯定关闭了所有 VS 实例,并且设置了密钥,但警告再次开始弹出。 【参考方案1】:

在 Tzury 提到的文章中也找到了,但总结一下这个线程中的答案:

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

Visual Studio 2022:关注these instructions,然后重启。Visual Studio 2019:关注these instructions,然后重启。

对于旧版本的 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,您可能需要创建上面引用的注册表项。

    确保 Visual Studio 没有运行,然后打开注册表编辑器。 导航到 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\Debugger,右键新建DWORD
姓名:DisableAttachSecurityWarning 值:1

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

Visual Studio 2017

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

对于 VS 2017,将此 gist 保存为 *.ps1 文件并以管理员身份运行,或将以下代码复制并粘贴到 ps1 文件中:

#IMPORTANT: Must be run as admin

dir $env:LOCALAPPDATA\Microsoft\VisualStudio\15.* | % 
    #https://***.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

【讨论】:

对于 VS2012,密钥是 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Debugger\DisableAttachSecurityWarning @ImranRizvi 您需要确保在更改注册表时它没有运行,否则它将在退出时被旧值覆盖 VS 2017 怎么样? Debugger 键完全丢失(大部分都丢失了) 看起来 Visual Studio 2017 保留本地注册表,因此您必须更改此文件而不是全局注册表。我修复了附加安全警告的问题,只是编辑了这个本地注册表文件。阅读此答案以获得更多解释:***.com/a/41122603/692665 对于 VS2019,这对我有用:davici.nl/blog/…【参考方案2】:

注册表设置确实有效;但是,您必须确保将其设置在 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 等。

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

这篇文章中的其他答案包含正确的信息,但我在让它工作时遇到了问题,所以这是试图让答案非常明确。这些说明适用于在 Windows 7 Ultimate 64 位上运行的 Visual Studio 2010。

确保没有 Visual Studio 实例正在运行(使用任务管理器检查 devenv.exe) 将 DWORD DisableAttachSecurityWarning 注册表值添加到 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\X.X\Debugger 并将值设置为 1。对于 Visual Studio 2008,将 X.X 替换为 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

【讨论】:

【参考方案5】:

如果是本地计算机,您可以将 iis AppPool 身份更改为您的实际 Windows 用户。

【讨论】:

我最近被这个我以前从未见过的“功能”所困扰,当你的回答让我意识到这是因为我刚刚将一个实际用户帐户切换到apppool 身份。【参考方案6】:

您的答案可在http://msdn.microsoft.com/en-us/library/ms241736.aspx获得

如果你正在调试一个合法的 导致此警告的情况 出现,想要压制它,那里 是一个注册表设置,允许您 去做这个。记得重新启用 完成后的警告 场景。

【讨论】:

【参考方案7】:

这不是问题的直接答案,但它绕过了安全消息,还提供了一种更快的方式来附加到以前附加的进程:

安装Reattach extension 使用 Reattach 附加,消息被绕过 将 (Ctrl-R + Ctrl-[1-5]) 重新附加到前一个进程具有相同的好处

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

Visual Studio 扩展可用于 VS2015 和 VS2017:"Attach To All The Things":

您可以使用通常的过程将“附加到 IIS”绑定到您喜欢的任何键。

【讨论】:

【参考方案10】:

所以,对我来说,在 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

【讨论】:

【参考方案11】:

基于 SliverNinja 和 Martin Hollingsworth 现有答案的 powershell 变体。这已在 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!"

【讨论】:

以上是关于调试 IIS 时关闭 Visual Studio 附加安全警告的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 如何在停止调试Web程序后阻止IIS Express关闭

Visual Studio 2015 更新 1 - 调试时没有 IIS Express 响应

网站在visual studio调试正常,在IIS下就会出问题?

Visual studio 调试发布到IIS站点方式一

.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试)

Visual Studio 附加到进程调试