访问被拒绝在Windows 7上运行sn.exe

时间:2010-01-05 10:08:07

标签: .net

我正在尝试在Windows 7计算机上构建/签署程序集,但我得到以下异常:

x:\> SN -q -Vr "x:\someassembly.dll"
Failed to open registry key -- Access is denied.

我发现以下线程似乎是同一个问题,并且它提到他通过更改注册表项的权限来修复它,但它没有提到哪个注册表项。

http://social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/e84e015b-41c8-4170-8686-2474832fcd28

有没有人遇到过这个?

4 个答案:

答案 0 :(得分:4)

好的,我使用Process Mon确定了有问题的密钥,其中列出了以下内容:

sn.exe
RegCreateKey
HKLM\SOFTWARE\Wow6432Node\Microsoft\StrongName
ACCESS DENIED
Desired Access: Maximum Allowed

为当前用户提供以下密钥的写入权限解决了此问题

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft

请注意,授予root HKLM节点的写访问权限没有修复我的问题(显然注册表中文件夹的权限不是递归的?)

答案 1 :(得分:0)

如果是这种情况,您可以使用Process Monitor查看sn.exe尝试访问的注册表项。但这并不是与编程有关。

答案 2 :(得分:0)

-Vrsn.exe一起使用会被视为潜在的安全风险,因为它会禁用签名验证。这就是为什么你无法从无特权的命令提示符运行sn.exe -Vr

在尝试执行sn.exe -Vr之前,打开提升的命令提示符(具有管理权限)。

顺便说一下,使用-Vr注册一个验证条目(表示不应该验证指定的一个或多个程序集),并且只应在执行检测二进制文件(在检测之后尚未签名)时临时使用

完成后,请不要忘记使用-Vu取消注册该条目。

答案 3 :(得分:0)

正如其他人和我自己所指出的那样,-Vr(在系统范围内注册强名称验证跳过程序集)确实是一种特权操作,而您获得的“访问被拒绝”是合法的。

根据Sn.exe (Strong Name Tool) - MSDN,您可以添加用户名以指定要禁用检查的用户。这不应该需要管理权限:

sn -Vr <Assembly> %USERNAME%