sn.exe失败,并显示"访问被拒绝"错误消息

时间:2020-03-05 18:39:48  来源:igfitidea点击:

当我使用强名称工具创建新密钥来签署.NET程序集时,出现"访问被拒绝"错误消息。这在Windows XP计算机上可以正常使用,但在我的Vista计算机上则无法使用。

PS C:\users\brian\Dev\Projects\BELib\BELib> sn -k keypair.snk

Microsoft (R) .NET Framework Strong Name Utility  Version 3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Failed to generate a strong name key pair -- Access is denied.

是什么导致此问题,我该如何解决?

Are you running your PowerShell or
  Command Prompt as an Administrator? I
  found this to be the first place to
  look until you get used to User Access
  Control or by turning User Access
  Control off.

是的,我已经尝试以管理员身份运行PS和常规命令提示符。出现相同的错误消息。

解决方案

回答

我们是否以管理员身份运行PowerShell或者命令提示符?在我们习惯了用户访问控制或者关闭用户访问控制之前,我发现它是查找的第一个地方。

回答

Yes I have tried running PS and the
  regular command prompt as
  administrator. The same error message
  comes up.

另一个可能的解决方案是我们需要授予用户帐户访问位于C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys的密钥容器的权限

回答

为什么不启动sysinternals Process Monitor也能看到我们看到的内容,这是我收到任何拒绝访问消息时始终要做的第一件事?

http://technet.microsoft.com/zh-cn/sysinternals/bb896645.aspx

回答

有人重建了机器来解决此问题,但是可以通过授予用户访问密钥容器C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys的方法来解决
使用sn.exe -i创建的每个容器都位于MachineKeys目录中(除非我们在其他位置指定)。 sn.exe使用的默认密钥容器也位于该位置。

如果我们将密钥容器重置为一个新的容器,而忘记了它的位置,则可以使用sn.exe -c为强名称实用程序重置密钥容器。因此,如果帐户访问修复不起作用,则我们可能正在使用备用密钥存储,因此可能需要进行重置。

回答

只是更新一下:我在Vista中遇到了相同的问题。我在PC上的本地用户没有问题,但是随后我们切换到了一个域,并且我的域用户(尽管具有本地管理员权限)获得了"访问被拒绝"。
我授予域用户对C:\ Users \ All Users \ Microsoft \ Crypto \ RSA \ MachineKeys的访问权限,并对此进行了修复。