У меня есть служба, которую мне нужно запустить как другой пользователь для "Локальной системы"
Для правильной работы службы мне нужно добавить пользовательский PATH к пути по умолчанию.
ПУТЬ по умолчанию: A; B; C; Я установил для пользователей PATH X; так что, когда пользователь входит в систему в интерактивном режиме, эффективным ПУТЬ является A; B; C; X; Это было сделано путем установки HKEY_USERS \ XXXXXXX \ Environment \ Path
Все пути находятся на локальных жестких дисках.
Когда служба запускается как пользователь, я могу наблюдать, как она ищет необходимые DLL с помощью ProcMon. Это только поиск A; B; C; когда начинал как сервис.
Я попытался изменить тип службы с 0x10 на 0x110, что должно позволить взаимодействию с рабочим столом видеть, загружает ли это среду пользователя, но, похоже, это не помогло.
Должна ли Windows загружать настройки среды для пользователя при запуске служб? Есть ли обходной путь, если это поведение по умолчанию?
Спасибо
MS имеет программа, которая запускает любую программу как услугу. Один из параметров - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<name>\Parameters\AppDirectory
, хотя это может относиться только к этим обернутым службам.
Пробовали ли вы с помощью SRVANY превратить сценарий, такой как командный файл, в службу и установить там среду, прежде чем вызывать нужное приложение? Примечание: вы можете разрешить управление остановкой / запуском / перезапуском службы, если сценарий выполняет фоновые процессы и завершает работу, поскольку контроллер службы будет проверять, «запущен» ли сам сценарий. Вы также можете рассмотреть возможность чтения PATH из реестра пользователей в сценарии и использования его содержимого, чтобы окружение не было жестко закодировано в самом сценарии.
Это специфично для Windows Server 2003, но все же я думаю, что это может ответить на ваш вопрос: http://support.microsoft.com/kb/887693
Просто чтобы закрыть это.
Я написал это в общем формате, поскольку подозревал, что имею дело с общей проблемой службы Windows.
Однако оказывается, что это проблема самих исполняемых файлов службы. Похоже, что чтение системного пути и пользовательского пути каким-то образом зависит от исполняемого файла службы.
У меня есть две службы от одного поставщика, одна из них считывает как системный, так и пользовательский путь, а другая просто читает системный путь.