1

首先,一些背景:

我们的产品需要通过在 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_NAMESE_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 卸载蜂巢

我可能可以将其编码,但它似乎有点脆弱,并且可能有多种方法可能出错。有人有更“官方”的方法吗?

4

1 回答 1

3

您可以枚举的子键

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

每个子项都包含“ProfileImagePath”,它将指向配置文件的基本路径。根据操作系统版本和语言设置,您可以确定 LocalAppData 的位置(注意,它取决于语言!)。

编辑:进一步发展的可能起点可能是

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

不幸的是,这可能因用户而异,并且 HKEY_USERS 仅包含已加载配置文件的用户的密钥。如果您可以以某种方式加载配置文件,您可以尝试(如果用户的注册表尚未加载到 HKEY_USERS,也许可以以某种方式附加用户的注册表?)。

于 2009-03-25T13:44:27.707 回答