Невозможно запустить приложение COM через Jenkins, если ни один пользователь не вошел в систему - PullRequest
0 голосов
/ 25 апреля 2018

Я использую сервер Jenkins на компьютере под управлением Windows 10 в качестве службы.В одном из заданий Jenkins я должен выполнить тесты, используя приложение COM.Этот же компьютер также используется разработчиками в их повседневной работе над RDP, и рассматриваемое задание Jenkins выполняется ночью, когда ни один обычный разработчик не использует его.Но если ни один пользователь не вошел в систему на компьютере или не использует RDP, сценарию в задании не удается запустить приложение COM со следующим сообщением:

Процесс сервера не может быть запущен из-за настроенного удостоверенияэто неверно.Проверьте имя пользователя и пароль.

Я обнаружил, что проблема заключается в том, что идентификация для приложения COM берется у текущего интерактивного пользователя, и если его нет, происходит сбой, см.

https://support.microsoft.com/en-my/help/305761/com-server-application-that-uses-interactive-user-identity-fails-to-lo

Кажется, я не могу решить мою проблему.Я вижу два варианта:

  1. Убедитесь, что пользователь вошел в систему при выполнении задания
  2. Узнайте, как запустить приложение COM без интерактивного пользователя

Для 1 я вижу следующие решения и почему они не работают:

  • Автозапуск при запуске Windows и оставлении входа в систему :Не будет работать, так как мы используем компьютер в нашей повседневной работе через RDP, что означает, что локальный вошедший в систему пользователь будет исключен, поскольку нам разрешен только один сеанс за раз.
  • Вход в систему с использованиемRDP и затем выйдите, используя скрипт tscon.exe 0 /dest:console, который оставит сеанс открытым .Не будет работать, так как в команде 15 человек, использующих эту машину через RDP, и люди забудут использовать эту команду, когда войдут в систему к концу дня.

Для 2, я не могу найти способ сделать это.

Можно ли в Windows запланировать автоматический вход пользователя в систему до начала работы?Могу ли я использовать второй компьютер и запланировать сеанс RDP с первым компьютером до выполнения задания?

1 Ответ

0 голосов
/ 24 апреля 2019

Поскольку никто не смог обеспечить хорошее решение, я внесу свое решение в качестве ответа и возможного решения. В итоге я использовал второй компьютер (работающий под управлением Windows) и запланировал задачу на этом компьютере, чтобы каждую ночь (до запуска задания Jenkins) открывать сеанс RDP для компьютера под управлением Jenkins. Таким образом, задание Jenkins и COM-приложение имеют активного пользователя, которого могут использовать.

Вот как я этого добился:

  1. Войдите на второй компьютер (то есть, на котором не работает Jenkins), откройте диалоговое окно RDP (подключение к удаленному рабочему столу) и нажмите Показать параметры
  2. Введите данные для первого компьютера (т.е. тот, на котором запущен Jenkins). Обязательно снимите флажок Всегда запрашивать учетные данные (вам необходимо сохранить учетные данные, чтобы иметь возможность автоматизировать это).
  3. Сохранить конфигурацию в .rdp-файл, используя Сохранить как ...
  4. ВАЖНО: Нажмите кнопку подключения, чтобы подключиться к первому компьютеру, введите пароль и обязательно сохраните его. Также принимайте любые сертификаты e.t.c. для предотвращения будущих предупреждений / диалогов.
  5. Создать bat-файл, содержащий следующее

    mstsc C:\Path\To\saved_rdp_file.rdp

  6. Создайте задачу в Windows Sceduler, которая каждый вечер вызывает bat-файл, созданный на шаге 5.

  7. Необязательно : Если вы хотите закрыть rdp-сессию после завершения Jenkins, создайте второй скрипт-сценарий и также запланируйте его, содержащий:

    tasklist /FI "imagename eq mstsc.exe" | find "mstsc.exe" && taskkill /f /im mstsc.exe || echo process "mstsc.exe" is not running

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