Запуск службы Windows в интерактивном сеансе - PullRequest
9 голосов
/ 22 мая 2009

У коллеги есть программа пакетного сценария, которую необходимо запустить на Windows Server в режиме консоли, чтобы иметь доступ к интерактивному сеансу Windows. Сервер автоматически перезагружается через равные промежутки времени (на этом компьютере работает несвязанное приложение с закрытым исходным кодом, которое мы не можем контролировать). После перезагрузки он хочет автоматически запустить интерактивный сеанс Windows и запустить этот сценарий, а также службе также необходим доступ к сетевым ресурсам (в частности, к дискам CIFS).

Вот что мы уже пробовали:

  1. Запустить как службу Windows. Это не удалось, так как служба Windows может или иметь доступ к интерактивному сеансу или к сетевым ресурсам, но никогда оба.
  2. Использовал консоль управления Microsoft для добавления сценария для запуска при запуске, однако это не сработало.
  3. Использовал раздел реестра HKLM для запуска этого сценария, однако он запускается только тогда, когда мы вручную открываем сеанс удаленного рабочего стола на сервере.
  4. Создание запланированного задания. Запущенная программа не имела доступа к сеансу интерактивных окон.

Есть другие предложения? (Или, может быть, он что-то упустил, когда выдвинул одно из этих предложений?)

Ответы [ 5 ]

4 голосов
/ 24 мая 2009

В случае, если «Взаимодействовать с рабочим столом» на сервисе недостаточно (я видел несколько случаев, когда его нет), вы можете объединить его с AutoAdminLogon. Создайте три (или четыре для домена) значения REG_SZ в разделе HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon:

  • DefaultUserName
  • DefaultPassword
  • DefaultDomain
  • AutoAdminLogon

AutoAdminLogon должен быть установлен на строку"1", остальные не требуют пояснений.

Очевидно, что проблемы безопасности достаточно велики, чтобы пролететь над Юпитером.

1 голос
/ 24 мая 2009

Вы пытались запустить скрипт как службу Windows, но позволяли ему взаимодействовать с рабочим столом?

В частности:

  1. Перейти на страницу свойств сервиса
  2. Нажмите на вкладку «Вход»
  3. Выберите «Локальная системная учетная запись»
  4. Установите флажок «Разрешить службе взаимодействовать с рабочим столом»
0 голосов
/ 29 ноября 2010

См. Мой похожий вопрос и реальный ответ на него: Как запустить процесс из службы Windows в текущий сеанс пользователя ПРИМЕЧАНИЕ: флажок «Взаимодействовать с рабочим столом» не достаточно вообще.

0 голосов
/ 24 мая 2009

Я должен был сделать что-то подобное в последнее время; маршрут, который я обнаружил, но отказался из-за проблем с безопасностью, состоит в том, чтобы интерактивная служба установила себя на работу в интерактивном режиме, а затем запустила функцию ImpersonateUser в Win32 API, что, как я думаю, обеспечит преимущества обоих пользователь и интерактивный сеанс доступны из LocalSystem.

Само собой разумеется, что если кто-то взломает службу, которая это сделает, он получит полный контроль над машиной.

0 голосов
/ 22 мая 2009

Я рекомендую пойти по этому поводу другим путем. Вы могли бы создать другое приложение для Windows, которое связывается через IPC со службой Windows, и это может быть то, что имеет дело с закрытым приложением souorce. Но если вам необходимо, вы можете указать опцию в сервисе (вы можете сделать это через MMC, реестр и т. Д.). По сути, вы можете увидеть эту опцию, выбрав Управление компьютером-> Службы и приложения-> Службы-> Щелкните правой кнопкой мыши по своей службе-> Изменить учетную запись на Локальную систему и установите флажок «Разрешить системе взаимодействовать с рабочим столом».

Однако, опять же, я рекомендую выбрать другой путь.

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