HKEY_USERS仅包含已登录的用户

时间:2012-07-11 11:10:26

标签: c# windows-8

我正在撰写 c#应用程序

作为我的应用程序的一部分,我需要阅读用户的个人资料。

为了吸引所有用户,我使用的是Registry.Users.GetSubKey()

问题是在Windows 8上HKEY_USERS仅包含已登录用户! (当有2位用户登录时,我会在HKEY_USERS下看到2位用户,但如果其中一位用户将退出,那么HKEY_USERS下将只有1位用户

因此,我只为登录用户获取配置文件。

我试图搜索整个注册表以查找数据的保存位置,但我无法在任何地方找到此信息....当用户注销时,信息似乎消失了。

是设计还是错误?

保存数据的地方 - 它必须在注册表中,但我找不到它......

这可能是权限中的内容吗?也许信息存在但是当用户没有登录时它被隐藏了?是否有标志或其他东西我可以用来读取未登录用户的个人资料?

2 个答案:

答案 0 :(得分:6)

  

作为我的应用程序的一部分,我需要阅读用户的个人资料。

然后您需要重新设计您的应用程序。你要求的是不可能的。

来自Raymond Chen's blog post, "Beware of roaming user profiles"

  

[Y]你不能只通过HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList注册表键来查找所有用户配置文件,甚至可能修改它们,因为本地计算机上的用户配置文件的副本可能不是权威人士。

您在本地计算机上看到的与其他用户的个人资料相关的任何内容 - 无论是在HKEY_USERS下,还是在C:\ Users下的个人资料目录中 - 都是上次的本地缓存他们登录了那台机器。 真实数据,即最新数据,存储在某个域控制器上。

你根本不能依赖其他用户的本地存储的个人资料数据。你最好假装它甚至不存在。

答案 1 :(得分:3)

这可能不适用于所有情况,但符合我的需要。加载注册表配置单元

reg load HKU\Steven C:\Users\Steven\ntuser.dat

读取必要的数据,然后卸载

reg unload HKU\Steven

Example