如何从服务获取用户桌面的路径

How to get paths to user desktops from a service?

本文关键字:桌面 路径 用户 获取 服务      更新时间:2023-10-16

我需要从服务应用程序为本地Windows系统上的所有用户枚举桌面文件夹的路径。问题是有些用户可能当时没有登录。那么,有没有API或其他方法可以做到这一点?

第1版:对于那些没有阅读第一段的人,让我重复一遍——我没有用户帐户的令牌,用户当时可能无法登录。

EDIT2:在关闭应用程序支持的功能或卸载应用程序之前,我需要从用户桌面上删除快捷方式。

这是迄今为止我能想到的最好的方法。所以,如果有非英语安装Windows的人能帮我检查一下,我会很感激吗?

(为了简洁起见,我只是发布了一个伪代码。)

1-以下所有步骤都是通过本地服务应用程序完成的。

2-要获取所有用户配置文件的路径,请枚举HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList键中的子文件夹,并从中读取ProfileImagePath值。它将为每个用户帐户提供配置文件路径。

3-要获取桌面的文件夹名称,请从服务应用程序的HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders键中读取Desktop值(是的,我知道HKCU听起来很奇怪,但它对我有效。)然后使用环境变量API获取%USERPROFILE%环境变量的路径。所以你会得到两条路径,像这样:

C:Windowssystem32configsystemprofileDesktop

C:Windowssystem32configsystemprofile

然后简单地将第二个字符串与第一个字符串隔离开来,使用不区分大小写的比较,您将获得桌面的文件夹名称(即,在这种情况下为"\Datadesk")

4-将桌面文件夹添加到步骤2中获得的路径,以生成该用户桌面文件夹的完整路径。

来自userenv.h:GetProfilesDirectory(win2k+,iirc)

msdn.microsoft.com/en-us/library/windows/desktop/bb762278(v=vs.85).aspx

使用此选项可以查找包含所有本地用户帐户配置文件目录的目录。

查找桌面文件夹:

Shlobj.h:SHGetKnownFolderPath(vista+)

msdn.microsoft.com/en-us/library/windows/desktop/bb762188(v=vs.85).aspx

您需要FOLDRID_Desktop作为已知的文件夹id。此符号在Knownfolders.h 中声明

msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx

使用这些,您可以在不直接读取注册表的情况下更接近您想要的内容。当然,除了从GetProfilesDirectory。也许有一种更适合api的方式来枚举本地用户。

其次,这取决于你的服务目的,但也许通过使用"allusers"配置文件,而不是每个用户,你就不需要知道当前的本地用户列表。