在C#windows服务中获取appdata\local文件夹路径

AMI*_*LKE 18 c# windows-services

我正在尝试C:\Users\<username>\AppData\Local使用文件夹路径

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)

在C#Windows服务中,但它返回一些其他路径

C:\Windows\ServiceProfiles\LocalService\AppData\Local
Run Code Online (Sandbox Code Playgroud)

有没有任何想法如何正确地做到这一点?

Wol*_*370 7

您是否在用户帐户下运行该服务?如果没有,服务将使用您自己的个人资料.如果用户"登录"此服务,则可以将该文件夹传递给服务并绕过本地检查.否则,尝试在用户帐户下运行服务(或为其创建帐户).


Der*_*ick 5

每个用户的 AppData 文件夹都存储在注册表中。

使用此路径:

const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders";
const string regValueAppData = @"AppData";
Run Code Online (Sandbox Code Playgroud)

给定一个包含用户 sid 的变量 sid 字符串,您可以像这样获取他们的 AppData 路径:

string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string;
Run Code Online (Sandbox Code Playgroud)