【问题标题】:Windows: How can I find the LocalAppData directory for each user on a particular machine?Windows:如何找到特定机器上每个用户的 LocalAppData 目录?
【发布时间】:2009-03-25 13:23:29
【问题描述】:
首先,一些背景:
我们的产品需要通过在 NOTES.INI 文件中添加或更新一行来与 Lotus Notes 客户端集成。
如果我们正在处理 Notes 的单用户安装(即,如果机器上有多个 Windows 用户,他们都将使用相同的 Notes 配置),我们不会遇到问题。在这种情况下,Notes 安装目录中有一个 NOTES.INI 文件。
但是,在 Notes 的多用户安装下(每个 Windows 用户都有自己的 Notes 配置),每个用户都有自己的 NOTES.INI 文件存储在用户的 LocalAppData 目录中 - 例如C:\Documents and Settings\Username\Local Settings\Application Data\Lotus\Notes。
所以问题来了:
如果我们的产品安装在多用户安装 Notes 客户端的机器上,我们需要能够更新该机器上每个用户配置文件中的 NOTES.INI 文件。
我们可以通过在用户登录时运行一个程序来执行此操作,该程序检查该用户的 NOTES.INI 文件是否已更新,如果没有,则更新它。但是,我们的应用程序的卸载过程需要能够为机器上的所有用户撤销这些修改。
因此问题是:假设我们的代码以本地管理员权限运行,是否有某种方法可以遍历每个用户的配置文件并找到他们的 LocalAppData 目录,以便我们进行必要的更改?
任何建议都非常感谢:-)
编辑 2009-03-25 16:52 GMT:
看起来我有一个可能的方法(感谢 Martin C):
对于
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 的每个子项:
如果它是“真实”用户(以某种方式确定):
记住子键名——这是用户的 SID
读取 ProfileImagePath 值
如果用户的注册表配置单元尚未加载(即没有具有适当 SID 的
HKEY_USERS 的子项):
启用
SE_BACKUP_NAME 和
SE_RESTORE_NAME 权限
使用 RegLoadKey 从
ProfileImagePath\NtUser.dat 加载配置单元
尝试依次使用以下每个注册表项查找用户的 LocalAppData 文件夹:
HKEY_USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹
HKEY_USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹
如有必要,在结果路径中展开环境变量(大概只是将 %USERPROFILE% 展开为我们之前得到的 ProfileImagePath)
使用路径查找用户的 NOTES.INI 文件并进行适当的更改
如果我们必须加载配置单元:
使用 RegUnLoadKey 卸载蜂巢
我可能可以将其编码,但它似乎有点脆弱,并且可能会出现多种错误。
有人有更“官方”的方法吗?
【问题讨论】:
标签:
windows
lotus-notes