代码之家  ›  专栏  ›  技术社区  ›  Skittles

从C控制台应用程序调用时出现注册表类型终止错误

  •  1
  • Skittles  · 技术社区  · 17 年前

    只是在我走错路之前找个指针。我写了一个小型的C控制台应用程序,它可以从我们的用户注册表中打开、读取、写入和删除HKEY U本地机器和HKEY U当前用户。

    当然,我让它在我的电脑和所有测试电脑上运行,但我们的一个客户机在尝试运行.exe时出错。

    System.Security.SecurityException:请求'System.Security.Permissions.RegistryPermission,mscorlib,version=2.0.0.0,Culture=Neutral,PublicKeyToken=B77A5C561934E089'类型的权限失败。

    at system.security.codeaccesssecurityengine.check(对象需求,stackcrawlmark&stackmark,布尔值ispermset) 在system.security.codeaccesspermission.demand()上 在Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String SubKeyName)上 位于Microsoft.win32.registrykey.checkOpenSubKeyPermission(String SubKeyName,Boolean>SubKeyWrite) 在Microsoft.win32.registrykey.openSubkey(字符串名称,布尔值可写) 在EstateMasterClearReg.Program.Main(String[]参数)

    失败的操作是:

    需求。 失败的第一个权限的类型是: system.security.permissions.registryPermission 失败的程序集区域为: 企业内部网

    因为我不能在客户机上测试这个(他们说他们在本地运行.exe并以admin身份登录)我能做些什么来尝试并确保应用程序在任何机器上运行吗?

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

    谢谢你的帮助。

    1 回复  |  直到 17 年前
        1
  •  2
  •   Chris W. Rea    17 年前

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

    或者,他们可能已经修改了默认的安全设置,这样即使它在本地运行,它也被认为是内部网区域的一部分。也检查一下。

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

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

    请注意,如果为程序集提供强名称,则仍需要修改本地安全策略,以授予程序集适当的权限。强名称本身不会授予所需的附加权限。