Вопрос:

Как я могу определить, когда безопасно обновлять службу Windows?

azure-devops

26 просмотра

1 ответ

3551 Репутация автора

У меня есть служба Windows, которая опрашивает базу данных и будет делать вещи в зависимости от найденных записей.

Я хочу настроить Azure Devops для автоматического развертывания обновления для этой службы.

Для развертывания обновления мне нужно остановить службу.

Есть ли способ, которым я могу сказать, будет ли это прервать его обработку?

В моем выпускном конвейере с командным заданием я использую

sc stop MyService
Автор: Kirsten Greed Источник Размещён: 07.06.2019 03:35

Ответы (1)


0 плюса

1897 Репутация автора

Когда вы вводите команду SC STOP, вы просто делаете запрос на остановку службы . Когда служба получает запрос, она может немедленно остановиться или дождаться завершения важных задач - что бы она ни хотела сделать. Ваш сервис находится под контролем.

Чтобы избежать недопустимого прерывания, «остановка рабочего процесса» вашей службы должна выглядеть следующим образом:

  1. Сделан запрос на остановку сервиса (через SC STOP, NET STOP и т. Д.)
  2. Служба "поток слушателя" получает запрос на остановку
  3. Поток устанавливает флаг, по которому была запрошена остановка, и устанавливает состояние службы в SERVICE_STOP_PENDING.
  4. «Поток обработки» периодически проверяет флаг (в удобное время - скорее всего между заданиями)
  5. Если флаг установлен, цикл обработки завершается, когда это удобно
  6. И поскольку вся обработка завершена, статус службы устанавливается на SERVICE_STOPPED, и вся служба завершается.

При таком подходе ваш сервис никогда не будет прерван в «плохом» месте.

Автор: CoreTech Размещён: 12.06.2019 09:19
Вопросы из категории :
32x32