我最近升级到了WIndows 7.当我尝试在VS2010中演唱程序集时,我收到“访问被拒绝”错误。我以管理员身份登录,所以我很困惑。 VS使用哪种服务帐户来提升其特权?
谢谢,
Risho
答案 0 :(得分:33)
我不知道它是Window 7还是公司政策,但我必须拥有C:\ Users \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys文件夹的所有权并给予我自己完全控制权。这纠正了这个问题。
答案 1 :(得分:14)
解决方案:
从管理员命令提示符处运行以下命令:
对于64位系统:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\StrongName /v MachineKeyset /t REG_DWORD /d 0
对于32位系统:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\StrongName /v MachineKeyset /t REG_DWORD /d 0
更改立即生效。
为什么会这样:
Visual Studio用来对程序集进行签名的MS Assembly Linker ALINK(AL.EXE)在其工作期间会创建一个临时的加密密钥。实际上,它为此使用了一些内部CLR函数,问题是默认情况下使用CRYPT_MACHINE_KEYSET标志。这需要提升,这就是为什么以“以管理员身份”运行VS的原因。
但是,幸运的是,我发现CLR有一个用于StrongName签名的全局标志,并且存储在
下的系统注册表中。HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ StrongName
并由DWORD值控制
MachineKeyset 。
0-使用当前用户密钥集
1-使用机器密钥集(默认设置)
Visual Studio是一个32位应用程序,并使用32位版本的AL.EXE进行构建。因此,在64位系统上,它受registry redirection的约束,并且该标志位于密钥下
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ StrongName
它可以在我的VS2019,Win10和.Net框架4.8上运行,但是我没有在以前的版本上对其进行过测试。
答案 2 :(得分:1)
在Win10上,我给使用Visual Studio的用户提供了读取,写入,运行,更改和显示文件夹的权限:
C:\ProgramData\Microsoft\Crypto
答案 3 :(得分:0)
对于Windows 10和VS 2015,我必须以管理员身份运行VS。