我想在WIndows上运行我的服务时访问MyDocuments
文件夹中的一些文件。
文档说,如果Windows GetDocumentsPath
返回:
C:\Documents and Settings\<username>\My Documents
(XP)C:\Documents and Settings\<username>\My Documents
(Vista或更高版本)在我的情况下,我得到C:\WINDOWS\system32\config\systemprofile\Documents
。它是Windows中Documents文件目录的某种链接吗?顺便说一句,我在Documents
路径中看不到C:\WINDOWS\system32\config\systemprofile
文件夹。
有人可以向我解释一下吗?
答案 0 :(得分:2)
“文档”文件夹是每个用户文件夹。 TPath.GetDocumentsPath()
返回与调用线程关联的用户帐户的Documents文件夹。但是,如果您的服务是在SYSTEM
帐户下运行,而不是特定用户帐户,则无法使用TPath
获取任何特定于用户的文件夹的路径。
要使服务检索用户的“文档”文件夹(或任何其他特定于用户的文件夹),该服务必须:
作为所需用户开始运行,而不是SYSTEM
帐户。
如果作为SYSTEM
帐户运行,请获取所需用户帐户的令牌,然后将该令牌传递给SHGetFolderPath()
或SHGetKnownFolderPath()
。
WTSEnumerateSessions()
和WTSQuerySessionInformation()
找到用户的登录会话,然后使用WTSQueryUserToken()
获取该会话#s用户令牌。LogonUser()
登录该帐户以获取用户令牌,然后加载用户&#39;在查询文件夹路径之前,使用LoadUserProfile()
将配置文件存入内存。