Получить каталог appdata\local folder в службе Windows С#
Я пытаюсь получить путь к папке C:\Users\<username>\AppData\Local
, используя
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
в службе Windows С#, но возвращает другой путь
C:\Windows\ServiceProfiles\LocalService\AppData\Local
Есть ли у кого-нибудь идеи, как это сделать правильно?
Ответы
Ответ 1
Вы используете службу под учетной записью пользователя? Если нет, служба будет использовать свой собственный профиль, как вы видите. Если эта услуга "зарегистрирована" пользователем, вы можете передать ее в службу и обойти локальную проверку. В противном случае попробуйте запустить службу под учетной записью пользователя (или создать для нее учетную запись).
Ответ 2
Папка AppData для каждого пользователя сохраняется в реестре.
Используя этот путь:
const string regKeyFolders = @"HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders";
const string regValueAppData = @"AppData";
Учитывая переменную строку sid, содержащую sid пользователей, вы можете получить их путь к AppData следующим образом:
string path=Registry.GetValue(regKeyFolders.Replace("<SID>", sid), regValueAppData, null) as string;