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