每个用户的注册表值
我有一个读取和写入注册表文件的程序,以便记住窗口位置等。这对于仅仅是管理员而言非常简单,但当您仅仅是一名用户时就非常简单系统。每个用户的注册表值
我使用高级安装程序,如果你有任何很酷的建议。
- 应该在哪里定位注册参数,以便每个用户都可以使用我的应用程序和他们自己的注册表值?
- 该路径是否足够通用,以便程序可以找到该文件夹而不会遇到问题?
编辑/更新:
问题1:你在哪里放东西,如果不是在HKEY_CURRENT_USER?
答:当我把这些文件放在HKEY_CURRENT_USER下时,它只会把它放在那个用户下面。因此,如果我要以管理员身份安装程序,那只有该用户拥有这些文件。由于我使用的是高级安装程序,因此我不确定这是否属于某些设置值。
声明1,从波格丹Mitrache: 如果你愿意,你也可以利用从Windows安装程序的自我修复支持(高级安装也支持),让安装程序写入HKCU下的默认设置为每个用户启动应用程序,即使由管理员安装。这里是一个文件的例子,但它也适用于注册表:advancedinstaller.com/user-guide/qa-self-healing.html
回应:这是一个很好的解决方案,除了我有条件安装的问题。用户可以选择安装其中一个或另一个功能,他们都使用这些注册表值。这可能是为什么它不适合我。我将在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()
加载其他用户的配置文件,该配置文件返回加载的用户的HKEY_CURRENT_KEY
密钥(除其他之外)的句柄。
如果要访问其他用户的HKEY_CLASSES_ROOT
键代替HKEY_CURRENT_USER
,您可以使用RegOpenUserClassesRoot()
。
如果不在'HKEY_CURRENT_USER'中,你会把东西放在哪里? – molbdnilo
也许你应该使用HKCU而不是HKLM – Federico
当我把这些文件放在HKEY_CURRENT_USER下时,它只会把它放在那个用户下面。因此,如果我要以管理员身份安装程序,那只有该用户拥有这些文件。由于我使用的是高级安装程序,因此我不确定这是否属于某些设置值。 – 413X