每个用户

时间:2017-09-01 12:31:35

标签: c++ windows registry

我有一个程序可以读取和编写注册表文件,以便记住窗口位置等。当你只是作为管理员时,这非常简单,但当你只是系统中的用户时,这不是很多。

如果您有任何很酷的建议,我会使用高级安装程序。

  1. 应该在哪里注册参数,以便每个用户使用我自己的注册表值?
  2. 该路径是否足够通用,以便程序可以找到该文件夹​​而不会遇到问题?
  3. 编辑/更新:

    问题1:如果不在HKEY_CURRENT_USER中,你在哪里放东西?

    答案:当我把文件放在HKEY_CURRENT_USER下面时,它只会把它放在那个用户下面。因此,如果我以管理员身份安装程序,那么只有那个用户才能拥有这些文件。由于我使用的是高级安装程序,因此我不确定是否属于某些设置值。

    Bogdan Mitrache声明1: 如果您愿意,还可以利用Windows Installer的自我修复支持(也由Advanced Installer支持)让安装程序为启动应用程序的每个用户在HKCU下编写默认设置,即使是由管理员安装。以下是文件示例,但它也适用于注册表:advancedinstaller.com/user-guide/qa-self-healing.html

    响应:除了我有条件安装的问题之外,这是一个很好的解决方案。用户可以选择安装一个或另一个功能,其中两个使用这些注册表值。这可能就是为什么它不适合我。我会考虑在AI中逻辑意义上复制文件。

1 个答案:

答案 0 :(得分:1)

处理此问题的正确方法是在HKEY_LOCAL_MACHINE中存储默认值(例如在安装期间)(如果有的话),然后再存储用户特定的< / {> HKEY_CURRENT_USER中的值。

当应用需要读取值时,请先检查HKEY_CURRENT_USER,如果没有找到,请检入HKEY_LOCAL_MACHINE(或使用硬编码默认值)。

当应用需要存储值时,只能将其存储在HKEY_CURRENT_USER中。

是的,这确实意味着如果您的应用由管理员运行,默认情况下它将从管理员密钥中读取值,并将值存储在管理员密钥中。这是完全可以的,因为管理员当时是应用程序的用户。如果应用程序由非管理员运行,则值将相对于该用户而言。

在应用程序以管理员用户身份运行但需要在另一个用户的HKEY_CURRENT_USER键中读取/存储值的情况下(例如,当非管理员用户登录到Windows并且应用程序是使用其他用户的登录名运行UAC提升),然后应用程序可以通过以下任一方式打开其他用户的HKEY_CURRENT_USER键:

如果您想访问其他用户的HKEY_CLASSES_ROOT密钥而不是HKEY_CURRENT_USER,则可以使用The export page