Windows 7提升了注册表访问

时间:2010-12-09 08:40:22

标签: windows-7 installer uac registry

我正在为我们的应用程序安装一个安装程序。安装程序对HKEY_CURRENT_USER \ Software \ Company \ AppName注册表项进行一些更改,然后应用程序首次运行该注册表项。然后,应用程序根据找到的注册表项执行不同的操作。

这很好用,直到你尝试在Windows 7上安装应用程序作为用户帐户(即非管理员)(也许是Vista,我还没有测试过)。

当用户尝试安装应用程序时,Windows会升级到管理员帐户的凭据。这意味着注册表中对HKCU的任何更改都是对管理员的注册表进行的,而不是对启动用户的注册表进行的。因此,当应用程序首次在用户帐户下启动时,该键对应用程序不可见。

我们不能成为安装程序需要与其安装的应用程序进行通信的唯一人员。有没有办法可靠地使用注册表来执行此操作?

我们不能依赖用户在安装应用程序后启动应用程序,因此将信息作为命令行参数传递并不是一个可行的解决方案。我能看到的唯一方法是让安装程序调用一个实用程序作为原始用户,它自己获取或设置注册表项;这似乎是一个愚蠢的箍必须跳过。

编辑:应用程序需要在使用它们之后删除它们,所以我不能把它们放在HKEY_LOCAL_MACHINE中。

2 个答案:

答案 0 :(得分:3)

有两种推荐的方法可以满足您的需求:

  1. 使用每用户安装 不需要管理员 特权。你将能够使用 HKEY_CURRENT_USER,但是您的产品 没有为所有用户安装。

  2. 使用需要管理员权限的每台计算机安装。在这种情况下,您需要重新设计应用程序,以便从配置文件中读取其设置。只有在保存特定于用户的设置时才应使用HKEY_CURRENT_USER,而不是全局应用程序设置。

  3. 基本上,如果您的应用程序是每台计算机,则应使用HKEY_LOCAL_MACHINE或配置文件。如果是每用户,您可以使用HKEY_CURRENT_USER。任何其他组合都有局限性,不会按照您的需要运作。

答案 1 :(得分:2)

如果您需要所有用户都可以使用您的应用程序信息,请使用HKEY_LOCAL_MACHINE配置单元。

编辑 - 2种选择:

  • 更改注册表的安全性 允许用户编辑/删除的键 它们,
  • 使用ProgramData目录(而不是注册表)进行存储 数据。