Получить текущий путь UserProfile из Сервиса - PullRequest
2 голосов
/ 17 декабря 2009

Я написал некоторый код для обнаружения информации о прокси пользователя. Это работает, когда я запускаю программу напрямую, но не работает, если программа вызывается службой. Служба не может знать путь к папке текущего пользователя, чтобы получить пользовательские настройки Firefox. Программа должна быть запущена службой ... как служба может получить текущий профиль пользователя для этой работы?

Пример кода:

public static string FIREFOX_PROXY_PATH = @"\APPLICATION DATA\MOZILLA\FIREFOX\";
public static string FIREFOX_PROXY_PROFILE_FILE_NAME = "PROFILES.INI";

string strProfPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + FIREFOX_PROXY_PATH + FIREFOX_PROXY_PROFILE_FILE_NAME;

При запуске с рабочего стола я получаю это (рабочий файл найден):
C:\\Users\\myusername\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

При запуске из службы я получаю следующее (файл не найден):
C:\\Profiles\\NetworkService\\APPLICATION DATA\\MOZILLA\\FIREFOX\\PROFILES.INI

Примечание: myusername заменяется моим действительным именем пользователя

1 Ответ

1 голос
/ 17 декабря 2009

Код на самом деле работает так, как он должен работать. Чтобы получить свой профиль, вам нужно изменить учетную запись, под которой работает служба. Для этого перейдите к оснастке «Управление службами» на панели управления и щелкните правой кнопкой мыши службу, выберите «Свойства», а затем измените учетную запись, с которой работает служба, на свою учетную запись (на вкладке Вход в систему ). ).

Конечно, после прочтения вашего вопроса дважды кажется, что вы действительно хотели бы получить путь к профилю для вошедшего в систему пользователя. Если это так, то, что я опишу выше, не будет работать. Вам нужно будет использовать другую тактику, чтобы получить доступ к текущему пользователю, а затем получить путь к профилю пользователя. Все это доступно в Реестре.

Класс WindowsIdentity может помочь, но вы должны иметь в виду, что в любой момент времени на компьютере с Windows может входить в систему более одного пользователя. Я говорю may потому что на большинстве пользовательских компьютеров обычно есть только один активный пользовательский сеанс. Но это не значит, что запущены процессы только одного пользователя. Таким образом, в зависимости от того, что именно вы пытаетесь достичь, могут быть и другие вещи, которые вам необходимо принять во внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...