签名程序集访问被拒绝

时间:2011-01-05 16:14:17

标签: visual-studio-2010

我最近升级到了WIndows 7.当我尝试在VS2010中演唱程序集时,我收到“访问被拒绝”错误。我以管理员身份登录,所以我很困惑。 VS使用哪种服务帐户来提升其特权?

谢谢,

Risho

4 个答案:

答案 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。