在我走错路之前寻找一些指针。我编写了一个小型C#控制台应用程序,可以在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER
下打开,读取,写入和删除我们的用户注册表。当然,我让它在我的电脑和所有测试电脑上运行,但我们的一个客户在尝试运行.exe时遇到错误
System.Security.SecurityException:请求类型为'System.Security.Permissions.RegistryPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。 < / p>
at System.Security.CodeAccessSecurityEngine.Check(Object demand,StackCrawlMark&amp; stackMark,Boolean isPermSet) 在System.Security.CodeAccessPermission.Demand() 在Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName) 在Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(String subkeyName,Boolean&gt; subKeyWritable) at Microsoft.Win32.RegistryKey.OpenSubKey(String name,Boolean writable) 在EstateMasterClearReg.Program.Main(String [] args)
失败的行动是:
需求。 失败的第一个权限的类型是: System.Security.Permissions.RegistryPermission 失败的程序集区域是: 内部网
因为我无法在客户端计算机上测试这个(并且他们说他们在本地运行.exe并以管理员身份登录)有什么我可以尝试确保应用程序将在任何机器上运行?
我是否需要使用强名称密钥和AllowPartiallyTrustedCallers,还是应该使用System.Security.Permissions.RegistryPermission?
感谢您的帮助。
答案 0 :(得分:2)
看起来他们可能正在通过网络运行您的可执行文件。让他们尝试将其复制到本地硬盘并再次运行。分配给可执行文件的权限在从网络共享运行与从本地文件系统运行之间有所不同。
或者,它们可能已经修改了默认安全设置,因此即使它在本地运行,它也被视为Intranet区域的一部分。检查那些。
这里的提示也可能有所帮助:
http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx
请注意,如果为程序集提供强名称,则仍需要修改本地安全策略,以便为程序集提供适当的权限。强名称本身不会授予所需的额外许可。