1

只是在我走错路之前寻找一些指针。我编写了小型 C# 控制台应用程序,可以在 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 下从我们的用户注册表中打开、读取、写入和删除

当然,我让它可以在我的 PC 和所有测试 PC 上运行,但是我们的一个客户在尝试运行 .exe 时遇到错误

System.Security.SecurityException:请求“System.Security.Permissions.RegistryPermission,mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”类型的权限失败。

在 System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) 在 System.Security.CodeAccessPermission.Demand() 在 Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName) 在 Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(String subkeyName, Boolean > subKeyWritable) at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) at EstateMasterClearReg.Program.Main(String[] args)

失败的动作是:

要求。第一个失败的权限类型是:System.Security.Permissions.RegistryPermission 失败的程序集区域是:Intranet

由于我无法在客户端机器上对此进行测试(他们说他们在本地运行 .exe 并以管理员身份登录)我可以做些什么来尝试并确保应用程序可以在任何机器上运行机器?

我需要使用强名称密钥和 AllowPartiallyTrustedCallers 还是应该使用 System.Security.Permissions.RegistryPermission?

谢谢你的帮助。

4

1 回答 1

2

看起来他们可能正在通过网络运行您的可执行文件。让他们尝试将其复制到本地硬盘驱动器并再次运行。分配给可执行文件的权限在从网络共享运行它与从本地文件系统运行之间是不同的。

或者,他们可能已经修改了默认安全设置,因此即使它在本地运行,它也被视为 Intranet 区域的一部分。检查那些,太。

这里的提示也可能会有所帮助:

http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx

请注意,如果您为程序集提供一个强名称,您仍然需要修改本地安全策略以赋予您的程序集适当的权限。强名称本身不会授予所需的额外权限。

于 2009-05-20T01:51:20.363 回答