我正在撰写 c#应用程序。
作为我的应用程序的一部分,我需要阅读用户的个人资料。
为了吸引所有用户,我使用的是Registry.Users.GetSubKey()
。
问题是在Windows 8上HKEY_USERS
仅包含已登录用户! (当有2位用户登录时,我会在HKEY_USERS
下看到2位用户,但如果其中一位用户将退出,那么HKEY_USERS
下将只有1位用户
因此,我只为登录用户获取配置文件。
我试图搜索整个注册表以查找数据的保存位置,但我无法在任何地方找到此信息....当用户注销时,信息似乎消失了。
是设计还是错误?
保存数据的地方 - 它必须在注册表中,但我找不到它......
这可能是权限中的内容吗?也许信息存在但是当用户没有登录时它被隐藏了?是否有标志或其他东西我可以用来读取未登录用户的个人资料?
答案 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