每个用户的registry值

我有一个程序,读取和写入registry文件,以记住窗口位置等。这是非常简单的,当涉及到只是作为pipe理员,而不是那么多,当你只是一个系统上的用户。

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

  1. 在哪里应该注册参数的位置,以便每个用户使用我的应用程序与他们自己的registry值?
  2. 该path是否足够一般,程序可以find该文件夹​​而不会遇到问题?

编辑/更新:

问题1:如果不在HKEY_CURRENT_USER中,你将把它放在哪里?

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

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

回应:这是一个很好的解决scheme,除了我有一个条件安装的问题。 用户可以select安装其中一个或另一个function,他们都使用这些registry值。 这可能是为什么它不为我工作。 我将在AI中以逻辑意义复制文件。

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

当应用程序需要读取值时,首先检查HKEY_CURRENT_USER ,如果找不到,则检查HKEY_LOCAL_MACHINE (或使用硬编码的默认值)。

当应用程序需要存储一个值时,只能将其存储在HKEY_CURRENT_USER

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

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

  • 冒充其他用户,然后使用RegOpenCurrentUser()

  • 使用LoadUserProfile()来加载其他用户的配置文件, LoadUserProfile()会返回一个到加载的用户的HKEY_CURRENT_KEY键(除其他外)的句柄。

如果要访问另一个用户的HKEY_CLASSES_ROOT键而不是HKEY_CURRENT_USER ,则可以使用RegOpenUserClassesRoot()