首先,一些背景:
我们的产品需要通过在 NOTES.INI 文件中添加或更新一行来与 Lotus Notes 客户端集成。
如果我们正在处理Notes 的单用户安装(即如果机器上有多个Windows 用户,他们都将使用相同的Notes 配置),我们没有问题。在这种情况下,Notes 安装目录中有一个 NOTES.INI 文件。
但是,在 Notes 的多用户安装下(每个 Windows 用户都有自己的 Notes 配置),每个用户都有自己的 NOTES.INI 文件存储在用户的 LocalAppData 目录中 - 例如 C:\Documents and Settings\Username\Local Settings \应用程序数据\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\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹 HKEY_USERS\<SID>\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 卸载蜂巢
我可能可以将其编码,但它似乎有点脆弱,并且可能有多种方法可能出错。有人有更“官方”的方法吗?