jenkins / hudson: пакетные окна CMD не видны, когда ведомое устройство работает как служба Windows

4518
Michael Lin

Я запускаю Jenkins slave как службу Windows, которая затем запускает цепочку вызовов (например):

Slave.exe-> ant-> cmd batch-> notepad.exe

Проблема в том, что «notepad.exe» не отображается, я вижу его в диспетчере задач, но он не отображает его пользовательский интерфейс.

Платформа Windows - это Win Server 2008, и я настроил службу «Вход в систему как локальная системная учетная запись», отметив «Разрешить службе взаимодействовать с рабочим столом».

Есть идеи по этому поводу? большое спасибо

1

2 ответа на вопрос

1
Harry Johnston

Начиная с Windows Vista, все службы работают в отдельном сеансе (сеанс 0) и не могут нормально взаимодействовать напрямую с пользователем, даже если установлен параметр «Разрешить взаимодействию службы с рабочим столом». Другими словами, вы не должны этого делать. Вы не можете запустить slave.exe во время сеанса входа?

Однако в качестве меры по снижению обратной совместимости Windows должна обнаружить, что служба представила пользовательский интерфейс, и предложить отобразить ее вам (на отдельном рабочем столе). Я не уверен, почему это не будет работать. Служба настроена для работы в качестве локальной системы?

Большое спасибо за ответ. Да, я настраиваю службу как «Использовать пользователя локальной системы». Так что я не могу использовать «службу Windows» для запуска подчиненного Jenkins, верно? Жаль, потому что это очень удобно ... Michael Lin 12 лет назад 0
Для дальнейшего использования в Windows 7 и более поздних версиях служба обнаружения интерактивных служб (UI0detect) не настроена для запуска по умолчанию. Если вам это нужно, вы можете запустить службу вручную или изменить конфигурацию так, чтобы она запускалась автоматически. Harry Johnston 9 лет назад 0
1
brakertech

Я столкнулся с подобной проблемой, пытаясь запустить некоторые сценарии автоматизированного веб-тестирования сценариев (для которых требовался графический интерфейс).

Это трюк. Вам необходимо запустить подключение к удаленному рабочему столу, настроить его на запуск .exe после запуска подключения, ввести и сохранить информацию для аутентификации и сохранить подключение на диск.

Пусть Дженкинс отключит сохраненное RDP-соединение, и оно должно запустить графический интерфейс для вас.

Кроме того, если вы выполняете несколько команд Windows в jenkins, вам нужно, чтобы каждая команда была представлена ​​в виде отдельных элементов (если они возвращают код выхода .. например, если вы вызываете два файла .bat или что-то в этом роде)