Почему разнятся значения Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) в разных приложениях?

214
16 октября 2018, 08:00

Я пишу сервис, где мне необходимо получить папку AppData\Roaming. Пользуюсь следующей конструкцией Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); Но получаю следующее значение: C:\WINDOWS\system32\config\systemprofile\AppData\Roaming\ Но если я запускаю консольное приложение и проделываю все тоже самое - получаю правильный результат. Может кто-нибудь, пожалуйста, объяснить в чем дело. Бьюсь несколько часов над проблемой и не могу никак решить.

Answer 1

C:\WINDOWS\system32\config\systemprofile - это путь к профилю для пользователя SYSTEM. Если вам нужен профиль другого пользователя, запускайте сервис от его имени, или найдите путь для конкретного пользователя (у SYSTEM для этого достаточно прав). Это можно сделать как-то так:

  1. Получить токен пользователя через LogonUser

  2. Загрузить его профиль через LoadUserProfile

  3. Получить путь к нужной папке с помощью SHGetKnownFolderPath, передав ей полученный токен

READ ALSO
Вставить текст в документ libreoffice writer с помощью C#

Вставить текст в документ libreoffice writer с помощью C#

Каким образом с помощью C# можно вставлять текст на поля (placeholder) в документ libreoffice writer? Где можно найти руководство? К сожалению, информацию...

162
wpf datagrid view раскрытие в дерево

wpf datagrid view раскрытие в дерево

надо сделать возможность развернуть в виде дерева, как на скрине

157
Навигация в UWP приложениях

Навигация в UWP приложениях

Допустим, у меня есть NavigationView с некоторым числом item-ов и Frame Как мне сделать так, чтобы менялось отображение только в Frame? В инете нашёл только...

218
Заменить строки в txt

Заменить строки в txt

Формат txt файла:

238