61

我知道我们不应该再使用注册表来存储应用程序数据,但是在更新旧应用程序(并希望做最少的更改)时,非管理员允许使用哪些注册表配置单元?

我可以在没有管理员权限 的情况下访问所有HKEY_CURRENT_USER(当前访问的应用程序)吗?HKEY_LOCAL_MACHINE

4

2 回答 2

97

通常,非管理员用户对注册表具有以下访问权限:

读/写到:

  • 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. 很少需要这样做,你应该避免它。问题是任何用户都可以“读取”它们,但只有管理员(或扩展,您的设置/安装程序)可以“设置”它们。

其他常见的问题来源:您的应用程序不应写入目录中的任何Program files内容Windows。如果您需要写入文件,手头有几个选项;描述所有这些将是一个更长的讨论。所有选项最终都会写入相关用户的子文件夹或另一个子文件夹%USERPROFILE%

最后,您的应用程序应该远离HKEY_CURRENT_CONFIG. 该配置单元包含硬件配置、服务配置和其他 99.9999% 的应用程序不需要查看的项目(例如,它包含当前的即插即用设备列表)。如果您从那里需要任何东西,大部分信息都可以通过其他地方支持的 API 获得。

于 2008-09-09T23:53:12.023 回答
3

是的,您应该能够在没有管理员权限的情况下写入 HKEY_CURRENT_USER 下的任何位置。但这实际上是一个私有存储,这台机器上的其他用户都无法访问,因此您不能在其中放置任何共享配置。

于 2008-09-09T23:44:09.250 回答