从 C# 控制台应用程序调用时出现RegistryPermission 错误
只是在走上错误的道路之前寻找一些指示。 我编写了小型 C# 控制台应用程序,可以在 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 下从我们的用户注册表中打开、读取、写入和删除
当然,我让它在我的 PC 和所有测试 PC 上运行,但我们的一个客户端在运行时出现错误他们尝试运行 .exe
System.Security.SecurityException:请求“System.Security.Permissions.RegistryPermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败。< /p>
at System.Security.CodeAccessSecurityEngine.Check(对象需求, StackCrawlMark&stackMark, Boolean isPermSet) 在 System.Security.CodeAccessPermission.Demand() 在 Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName) 在 Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(String subkeyName, Boolean > subKeyWritable) 在 Microsoft.Win32.RegistryKey.OpenSubKey(字符串名称,布尔可写) 在 EstateMasterClearReg.Program.Main(String[] args)
失败的操作是:
需求。 第一个失败的权限类型是: 系统.安全.权限.RegistryPermission 失败的装配区域是: 内联网
由于我无法在客户端计算机上对此进行测试(他们说他们有本地运行的 .exe 并以管理员身份登录),所以我可以做些什么来尝试确保该应用程序将在 Intranet 上 任何机器?
我是否需要使用强名称密钥和AllowPartiallyTrustedCallers,还是应该使用System.Security.Permissions.RegistryPermission?
感谢您的帮助。
Just looking for some pointer before I head down the wrong path. I have written small C# console app that opens, reads, writes and deletes from our users registry under both HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER
Of course, I got it to work on my PC and all the test PC but one of our clients is getting an error when they try to run the .exe
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.RegistryPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName)
at Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(String subkeyName, Boolean > subKeyWritable)
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at EstateMasterClearReg.Program.Main(String[] args)The action that failed was:
Demand.
The type of the first permission that failed was:
System.Security.Permissions.RegistryPermission
The Zone of the assembly that failed was:
Intranet
As I won't be able to test this on the client machines (and they said that they have the .exe running locally and are logged in as Admin) is there anything I can do to try and ensure that the app will run on any machine?
Do I need to use a strong name key and AllowPartiallyTrustedCallers or should I use System.Security.Permissions.RegistryPermission?
Thanks for your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看起来他们可能正在通过网络运行您的可执行文件。 让他们尝试将其复制到本地硬盘并再次运行。 从网络共享运行与从本地文件系统运行之间,分配给可执行文件的权限有所不同。
或者,他们也可能修改了默认安全设置,因此即使它在本地运行,它也被视为 Intranet 区域的一部分。 也检查一下。
这里的提示也可能有帮助:
http://blogs. msdn.com/shawnfa/archive/2003/06/20/57023.aspx
请注意,如果您为程序集指定了强名称,则仍然需要修改本地安全策略,以便为程序集提供适当的权限。 强名称本身不会授予所需的额外权限。
Looks like they may be running your executable over the network. Have them try copying it to a local hard drive and run again. The permissions assigned to the executable differ between running it from a network share vs. running from the local file system.
Alternatively, it could be possible that they have modified the default security settings, so that even if it is running locally, it is considered part of the Intranet zone. Check those, too.
The tips here may also be helpful:
http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx
Note that if you give your assembly a strong name, you'll still need local security policy to be modified to give your assembly the appropriate permissions. The strong name by itself won't grant the additional permission required.