Запуск службы Windows в интерактивном сеансе
у коллеги есть программа пакетного сценария, которая должна работать на сервере Windows в консольном режиме, чтобы иметь доступ к интерактивному сеансу Windows. Сервер перезагружается через регулярные промежутки времени автоматически (на этой машине работает несвязанное приложение с закрытым исходным кодом, над которым у нас нет контроля). После перезагрузки он хочет автоматически запустить интерактивный сеанс Windows и запустить этот скрипт, а также служба должна также иметь доступ к сетевым ресурсам (Приводы CIFS, в частности).
вот что мы пробовали до сих пор:
- запуск как служба Windows. Это не удалось, так как служба Windows может или иметь доступ к интерактивной сессии или к сетевым ресурсам, но не оба.
- используется консоль управления Microsoft, чтобы добавить скрипт для запуска при запуске, однако это не сработало.
- используется раздел реестра HKLM для запуска этого сценария, однако он получает только запускается, когда мы вручную открываем сеанс удаленного рабочего стола на сервере.
- создание запланированной задачи. Вызванная программа не имела доступа к интерактивному сеансу windows.
какие-то другие предложения? (Или, может быть, он что-то пропустил, когда создал одно из этих предложений?)
5 ответов
в случае, если" взаимодействовать с рабочим столом " на службе недостаточно (я видел несколько случаев, когда это не так), вы можете объединить его с AutoAdminLogon. Создайте три (или четыре для домена) значения REG_SZ в разделе HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon:
- разделы defaultusername
- DefaultPassword
- Домен_по_умолчанию
- AutoAdminLogon
AutoAdminLogon должно быть установлено в строка "1", другие не требуют пояснений.
очевидно, что у этого есть проблемы с безопасностью, достаточно большие, чтобы пролететь Юпитер.
вы пробовали, чтобы ваш скрипт запускался как служба Windows, но позволял ему взаимодействовать с рабочим столом?
в частности:
- перейдите на страницу свойств сервиса
- нажмите на вкладку "Вход"
- выберите "Учетная запись локальной системы"
- Проверьте "разрешить службе взаимодействовать с рабочим столом"
Я рекомендую сделать это по-другому. Вы можете создать другое приложение Windows, которое взаимодействует через IPC со службой Windows, и это может быть то, что имеет дело с закрытым приложением souorce. Но если необходимо, вы можете указать опцию в сервисе (вы можете сделать это через MMC, реестр и т. д.). В принципе, вы можете увидеть эту опцию, перейдя в Управление компьютером - >службы и приложения - >Службы - >щелкните правой кнопкой мыши службу - >изменить учетную запись на локальную систему и установите флажок " Разрешить системе взаимодействие с рабочим столом."
однако, опять же, я рекомендую выбрать другой путь.
недавно мне пришлось сделать что-то подобное; маршрут, который я нашел, но отбросил из-за проблем безопасности, должен иметь интерактивный сервис, установленный как работающий в интерактивном режиме, а затем запустить функцию ImpersonateUser в win32 API, который я думаю обеспечит преимущества как пользователя, так и Интерактивного сеанса, доступного из LocalSystem.
Излишне говорить, что если кто-то ворвался в службу, которая это сделала, они будут иметь полный контроль над машина.
см. мой аналогичный вопрос и реальный ответ на него:Как запустить процесс из службы windows в текущий сеанс пользователя Примечание: флажок "взаимодействовать с рабочим столом" не достаточно вообще.