C++ 每个用户的注册表值

C++ 每个用户的注册表值,c++,windows,registry,C++,Windows,Registry,我有一个程序,可以读取和写入注册表文件,以便记住窗口位置等。这对于管理员来说非常简单,但对于系统用户来说就不那么简单了 我使用先进的安装程序,如果你有任何冷静的建议在这方面 为了让每个用户使用自己的注册表值,注册参数应该位于哪里 该路径是否足够通用,以便程序可以定位该文件夹而不会出现问题 编辑/更新: 问题1:如果不是在HKEY_当前用户中,您将把东西放在哪里 答:当我把文件放在HKEY_CURRENT_用户下时,它只会放在该用户下。因此,如果我以管理员的身份安装该程序,则只有该用户拥有这些文件

我有一个程序,可以读取和写入注册表文件,以便记住窗口位置等。这对于管理员来说非常简单,但对于系统用户来说就不那么简单了

我使用先进的安装程序,如果你有任何冷静的建议在这方面

  • 为了让每个用户使用自己的注册表值,注册参数应该位于哪里
  • 该路径是否足够通用,以便程序可以定位该文件夹而不会出现问题
  • 编辑/更新:


    问题1:如果不是在HKEY_当前用户中,您将把东西放在哪里


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

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


    回答:这是一个很好的解决方案,除了我有条件安装的问题。用户可以选择安装一个或另一个功能,其中两个功能都使用这些注册表值。这可能就是为什么它对我不起作用。我将从AI的逻辑意义上研究复制文件。

    正确的处理方法是在
    HKEY_LOCAL_机器
    中存储默认值(例如在安装过程中),然后在
    HKEY_CURRENT_用户
    中存储特定于用户的值

    当应用程序需要读取值时,首先签入
    HKEY\U当前用户
    ,如果未找到,则签入
    HKEY\U本地机器
    (或使用硬编码默认值)

    当应用程序需要存储值时,请仅将其存储在
    HKEY\u CURRENT\u USER

    是的,这意味着如果你的应用程序是由管理员运行的,默认情况下,它将从管理员密钥中读取值,并将值存储在管理员密钥中。这很好,因为管理员是当时应用程序的用户。如果应用程序由非管理员运行,则值将与该用户相对

    如果应用程序以管理员用户身份运行,但需要读取/存储另一个用户的
    HKEY_CURRENT_user
    键中的值(例如,当非管理员用户登录Windows,并且应用程序使用另一个用户的登录以UAC提升运行时),然后,应用程序可以通过以下任一方式打开另一个用户的
    HKEY\U CURRENT\U USER
    键:

    • 模拟其他用户,然后使用

    • 通过使用加载其他用户的配置文件,这将返回加载用户的
      HKEY\u CURRENT\u键
      键的句柄(以及其他内容)


    如果您想访问另一个用户的
    HKEY\U CLASSES\U ROOT
    键而不是
    HKEY\U CURRENT\U user
    ,您可以使用。

    如果不在
    HKEY\U CURRENT\U user
    中,您应该使用HKCU而不是HKLM。当我将文件放在HKEY\U CURRENT\U user下时,它只会放在该用户下。因此,如果我以管理员的身份安装该程序,则只有该用户拥有这些文件。由于我使用的是高级安装程序,我不确定它是否属于某些设置值。
    HKLM
    下的应用程序设置(即非用户特定设置),以及
    HKCU
    下的用户设置。用户设置应由应用程序在每个用户第一次运行时设置,而不是由安装程序设置。如果您愿意,您也可以利用Windows installer(高级安装程序也支持)提供的自愈支持,让安装程序在HKCU下为启动应用程序的每个用户编写默认设置,即使是由管理员安装的。下面是一个文件示例,但它也适用于注册表: