我正在尝试在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
有没有人遇到过这个?
答案 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)
将-Vr
与sn.exe
一起使用会被视为潜在的安全风险,因为它会禁用签名验证。这就是为什么你无法从无特权的命令提示符运行sn.exe -Vr
。
在尝试执行sn.exe -Vr
之前,打开提升的命令提示符(具有管理权限)。
顺便说一下,使用-Vr
注册一个验证条目(表示不应该验证指定的一个或多个程序集),并且只应在执行检测二进制文件(在检测之后尚未签名)时临时使用
完成后,请不要忘记使用-Vu
取消注册该条目。
答案 3 :(得分:0)
正如其他人和我自己所指出的那样,-Vr
(在系统范围内注册强名称验证跳过程序集)确实是一种特权操作,而您获得的“访问被拒绝”是合法的。
根据Sn.exe (Strong Name Tool) - MSDN,您可以添加用户名以指定要禁用检查的用户。这不应该需要管理权限:
sn -Vr <Assembly> %USERNAME%