签名程序集访问被拒绝

问题描述 投票:0回答:4

我最近升级到了 Windows 7。当我尝试在 VS2010 中签署程序集时,出现“访问被拒绝”错误。我以管理员身份登录,所以我很困惑。 VS 使用什么服务帐户,我应该提升其权限?

visual-studio-2010
4个回答
51
投票

我不知道这是 Window 7 还是公司政策,但我必须拥有 C:\Users\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 文件夹的所有权,并给予自己完全控制权。这解决了这个问题。


28
投票

解决方案:

从管理员命令提示符运行以下命令:

对于 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 程序集链接器 ALINK (AL.EXE) 在其工作期间会创建一个临时加密密钥。实际上它为此使用了一些内部 CLR 函数,问题是默认使用 CRYPT_MACHINE_KEYSET 标志。这需要提升权限,这就是为什么“以管理员身份”运行 VS 的原因。

但是,幸运的是,我发现 CLR 有一个用于 StrongName 签名的全局标志,并且它存储在系统注册表中的

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\StrongName

并且由 DWORD 值控制

机器按键

0 - 使用当前用户密钥集

1 - 使用机器按键组(这是默认值)

Visual Studio 是一个 32 位应用程序,使用 32 位版本的 AL.EXE 进行构建。因此,在 64 位系统上,它受到 注册表重定向 的影响,并且该标志位于密钥下方

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\StrongName

它可以在我的 VS2019、Win10 和 .Net Framework 4.8 上运行,但我没有在以前的版本上进行测试。


2
投票

在 Win10 上,我向正在启动 Visual Studio 的用户授予读取写入、运行、更改和显示文件夹的权限:

C:\ProgramData\Microsoft\Crypto

1
投票

对于 Windows 10 和 VS 2015,我必须以管理员身份运行 VS。

© www.soinside.com 2019 - 2024. All rights reserved.