2017-01-27 1 views
-1

Причина, по которой я хотел перезапустить службы, заключается в том, что иногда одна из этих служб останавливается, чтобы выполнить задачу, для которой она была создана. Статус службы все еще запущен в диспетчере управления сервисом. Когда услуга перезапускается, все работает нормально. Я не знаю, почему это произошло. . Я попытался поймать блоки всюду в коде. База данных Соединения создаются/открыты/закрыты/уничтожены и т. Д.Можно ли программно перезапустить службу Windows из самой службы? Или я должен выбрать другой подход?

Любые идеи?

+0

Чтобы ответить на ваш вопрос * «Или я должен выбрать другой подход?» * ** ДА **. Вместо этого вы должны исправить основную проблему. Как бы вы знали (надежно) **, когда ** для перезапуска? ** Кто ** перезапустит его? –

ответ

1

Вот варианты:

  1. Fix the underlying problems если вы можете.

  2. Если вы не можете исправить основные проблемы (например, у вас есть очень сложный или непрозрачный код), переместите неприятный код в отдельный процесс. Ваш сервис может вызвать этот процесс и иногда убивать его. Предоставление его собственного процесса позволяет вам прервать его и вернуть ресурсы, даже если он зависнет. Сделайте услугу simple wrapper.

  3. Если вы не хотите разделить код, и требования к службе подходят для этого, возможно, вы можете сделать его простым исполняемым файлом и запустить его с помощью Windows Task Scheduler вместо службы.

  4. Если вы не можете изменить услугу, вы можете restart the service programmatically.