Windows:如何在特定计算机上找到每个用户的LocalAppData目录?

时间:2009-03-25 13:23:29

标签: windows lotus-notes

首先,一些背景知识:

我们的产品需要通过在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):

    For each subkey of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList:
      If it's a "real" user (determined somehow):
        Remember the subkey name - that's the user's SID
        Read the ProfileImagePath value
        If the user's Registry hive is not already loaded (i.e. there is no subkey of HKEY_USERS with the appropriate SID):
          Enable the SE_BACKUP_NAME and SE_RESTORE_NAME privileges
          Load the hive from ProfileImagePath\NtUser.dat using RegLoadKey
        Try to find the user's LocalAppData folder using each of the following Registry keys in turn:
          HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
          HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
          HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
          HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
        Expand environment variables in the resulting path if necessary (presumably just expanding %USERPROFILE% to the ProfileImagePath we got earlier)
        Use the path to find the user's NOTES.INI file and make the appropriate changes
        If we had to load the hive:
          Unload the hive using RegUnLoadKey

我可能会对其进行编码,但它似乎有点脆弱,并且可能有多种方法可能出错。 任何人都有更“官方”的方法吗?

1 个答案:

答案 0 :(得分: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,可能会以某种方式附加用户的注册表?)。