当我使用强名称工具创建新密钥来签署 .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.

是什么原因导致此问题以及如何解决它?


您是作为管理员运行PowerShell还是命令提示?我发现这是第一个查看的地方,直到您习惯用户访问控制或通过关闭用户访问控制为止。

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

有帮助吗?

解决方案

是的,我尝试运行PS和常规命令提示,作为管理员。出现了相同的错误消息。

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

其他提示

您是否以管理员身份运行 PowerShell 或命令提示符?我发现这是您习惯用户访问控制或关闭用户访问控制之前首先要查看的地方。

为什么不启动 sysinternals Process Monitor 看看你能看到什么,这是当我收到任何类型的访问被拒绝消息时我总是做的第一件事?

http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

只是稍微更新一下:我在 Vista 上也遇到了同样的问题。我的 PC 上的本地用户没有问题,但后来我们切换到域,我的域用户(尽管具有本地管理员权限)得到“访问被拒绝”。我授予我的域用户访问权限 C:\Users\All Users\Microsoft\Crypto SA\MachineKeys 这解决了它。

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

万一您将钥匙容器重置为新的,并且忘记了它在哪里..您可以使用 sn.exe -c 重置强名称实用程序的密钥容器。因此,如果帐户访问修复不起作用,您可能正在使用备用密钥存储,因此可能需要重置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top