2009-05-20 87 views
1

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

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

System.Security.SecurityException:请求类型System.Security.Permissions.RegistryPermission,mscorlib程序,版本= 2.0.0.0”的许可,文化=中性,PublicKeyToken = b77a5c561934e089'失败。

在System.Security.CodeAccessSecurityEngine.Check(对象的需求,StackCrawlMark & stackMark,布尔isPermSet) 在System.Security.CodeAccessPermission.Demand() 在Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(字符串subkeyName) 在Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(字符串subkeyName,布尔> subKeyWritable) 在Microsoft.Win32.RegistryKey.OpenSubKey(字符串名称,布尔可写的) 在EstateMasterClearReg.Program.Main(字串[] args)

动作失败的是:

需求。 第一许可失败的类型是: System.Security.Permissions.RegistryPermission 大会的区失败是: 联网

正如我不能对此进行测试的客户端上机器(他们说,他们有本地运行的.exe,并以管理员身份登录)有什么我可以做的尝试,并确保该应用程序可以在任何机器上运行?

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

感谢您的帮助。

+0

顺便说一句,你可以通过“本地运行”来定义你或客户端的含义吗?你的意思是.EXE位于本地驱动器并从那里执行? – 2009-05-20 01:56:49

+0

这是我的假设(这是他们通过电话告诉我的。)我更新了下面的评论,但基本上,我的意思是我告诉他们他们需要将它保存到他们的C驱动器并从那里运行它。 – Skittles 2009-05-20 03:33:55

回答

2

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

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

这里的技巧也可能会有所帮助:

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

请注意,如果你给你集强名称,你仍然需要本地安全策略进行修改,以让您的装配相应的权限。强名称本身不会授予所需的额外权限。