代码之家  ›  专栏  ›  技术社区  ›  Craig Shearer

使用registry.localmachine.opensubkey时的SecurityException

  •  7
  • Craig Shearer  · 技术社区  · 17 年前

    我正在开发一个需要写入注册表的应用程序。它在XP上可以正常工作,但是当我在Vista上运行它时,从Visual Studio中,我得到一个安全异常:

    registry.localmachine.opensubkey(“软件”,true);

    我正在尝试向注册表的那个分支写入一个新的键。

    这样做的正确方法是什么?首先,我可以在vista上从vs运行我的应用程序;其次,我的用户不会在vista上遇到运行问题。

    谢谢。。。

    5 回复  |  直到 16 年前
        1
  •  10
  •   Bevan    17 年前

    在xp和vista上,您需要管理员权限才能在localmachine下写入新密钥。

    您会发现这在xp上有效,在vista上由于不同的帐户默认值而失败。

    快速而肮脏的解决方案是确保您的应用程序在这两种情况下都具有管理权限,尽管在Vista中,这一点往往不受欢迎。

    更好的解决方案是稍微重新设计一些东西——新的子键可以由安装程序编写(使用管理员权限运行),还是可以将信息存储在其他地方?

        2
  •  7
  •   Michael    17 年前

    标准用户和管理员在Vista上使用UAC运行时,没有权限写入本地计算机注册表项。如果以标准用户身份运行,这在xp上也会失败。

    您的选择是:

    • 如果设置为每用户,则改用registry.currentuser。
    • 以管理员身份运行应用程序
    • 松开钥匙上的ACL,以便任何人 可以写-这是肯定的 不推荐,因为任何恶意软件 盒子上可以烤钥匙。
        3
  •  2
  •   Ray    17 年前

    只有以管理员身份运行时才能写入该密钥。因此,您需要以管理员身份运行vs,并且您的用户需要以管理员身份运行应用程序。

    我的建议是看看你是否真的需要写信给本地机器。您可以在没有管理员权限的情况下写入当前用户。

        4
  •  1
  •   Henk Holterman    17 年前

    我假设它“在xp下工作”,因为每个人都在xp下以admin的身份运行它?

    • 您可以尝试规避(在设置过程中创建密钥或在currentuser或其他项下使用密钥)。

    • 您可以在安装过程中授予应用程序特权。恐怕我对如何做到这一点的细节有点简短。

        5
  •  -1
  •   AVEbrahimi    16 年前

    使用registry.currentuser