我知道我们不应该再使用注册表来存储应用程序数据,但是在更新旧版应用程序(并希望进行最少的更改)时,非管理员可以使用哪些注册表配置单元?
我可以在没有管理员权限的情况下访问所有
HKEY_CURRENT_USER
(应用程序当前访问HKEY_LOCAL_MACHINE
)吗?
一般来说,非管理员用户对注册表具有以下访问权限:
读取/写入:
HKEY_CURRENT_USER
只读:
HKEY_LOCAL_MACHINE
HKEY_CLASSES_ROOT
(这只是HKEY_LOCAL_MACHINE\Software\Classes
的链接)
可以逐个密钥更改其中一些权限,但这种情况极为罕见。您不必担心这一点。
为了您的目的,您的应用程序应该将设置和配置写入
HKEY_CURRENT_USER
。规范地点位于内的任何地方
HKEY_CURRENT_USER\Software\YourCompany\YourProduct\
您可以在
HKEY_LOCAL_MACHINE
中保存全局(对于所有用户)的设置。需要这样做的情况非常罕见,您应该避免这样做。问题是任何用户都可以“读取”这些内容,但只有管理员(或扩展为您的设置/安装程序)可以 set
它们。
其他常见的麻烦来源:您的应用程序不应写入
Program files
或 Windows
目录中的任何内容。如果您需要写入文件,有多种选择;描述所有这些将是一个更长的讨论。所有选项最终都会写入相关用户的子文件夹或 %USERPROFILE%
下的另一个子文件夹。
最后,您的申请应该远离
HKEY_CURRENT_CONFIG
。该配置单元保存了 99.9999% 的应用程序不需要查看的硬件配置、服务配置和其他项目(例如,它保存了当前的即插即用设备列表)。如果您需要从那里获得任何信息,大部分信息都可以通过其他地方支持的 API 获得。
是的,您应该能够在没有管理员权限的情况下写入 HKEY_CURRENT_USER 下的任何位置。但这实际上是一个私人存储,该计算机上的其他用户无法访问,因此您不能在那里放置任何共享配置。