我正在寻找一种获取特定用户的本地应用程序数据文件夹的好方法,而无需输入该用户的登录详细信息。

SHGetFolderPath() 可以接受我想要获取其本地 appdata 文件夹的任何用户的访问令牌,但要获取访问令牌,您必须提供用户的密码。另外,根据 文档 <= Windows 2000 不支持此功能。

注册表键值 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹 包含 AppData 值,其中包含当前用户的本地 appdata 文件夹的位置...这样我就可以在技术上为特定用户安装 HKCU 配置单元并访问该值;然而,微软似乎强烈反对使用这个密钥,而且我听说它有时也会不准确。

具有讽刺意味的是,在 Windows 上,管理员帐户可以轻松访问和修改任何用户的 appdata 文件夹中的所有数据,只要他们打开资源管理器并浏览到正确的位置...但似乎没有一种简单的方法可以以编程方式获取特定用户的 appdata 文件夹的位置。

那么我还有其他选择吗?现在,访问注册表(喘息)似乎是最好的选择,但如果可能的话,我想使用官方的东西,并且微软不会阻止。

任何建议,将不胜感激。

有帮助吗?

解决方案

没有记录的方法可以在没有令牌的情况下执行此操作,但最好的选择是:

  1. 找到个人资料:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList(Win9x 上为 %windir%\Profiles)
  2. 调整令牌权限 SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT(9x 上为 USER.DAT)
  4. 查询 ...\CurrentVersion\Explorer\User Shell 文件夹

请注意,要检查的正确注册表项是用户外壳文件夹而不是外壳文件夹(并且您可能必须扩展路径),请参阅 Shell 文件夹键的漫长而悲伤的故事 欲了解详情

我还想指出,如果可能的话,您应该将数据存储在程序文件或公共文件夹中,然后在程序第一次为每个用户运行时复制到配置文件中

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top