2009-03-09 4 views
1

Я хочу запланировать перезапуск моих настраиваемых сервисов с автоматическим использованием командного файла с сетевым остановом, запуском сети.Перезапуск службы windows

Когда сетевые остановки останавливаются, он отменяет все, что делается немедленно?

Просто интересно, что произойдет, если в середине обработки?

Malcolm

+0

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

ответ

0

Это действительно зависит от сервиса. Я подозреваю, что большинство попытается войти в хорошее состояние, прежде чем остановиться. Это не убийство.

1

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

1

Это действительно зависит от того, как реализована услуга. «net stop» по сути звонит в службу и говорит «любезно остановитесь». Большинство служб будут выполнять эту команду и своевременно останавливаться. Однако есть плохие услуги, которые не соответствуют и отказываются останавливаться. В этом случае чистая остановка не предпримет никаких дальнейших действий.

0

Служба регистрирует получение событий (через RegisterServiceCtrlHandler). Когда вы выполняете сетевую остановку, зарегистрированный обратный вызов будет получать обратный вызов с помощью операции SERVICE_CONTROL_STOP. Как служба реагирует на этот обратный вызов, зависит от реализации службы. Было бы разумно, чтобы служба выполняла обычную обработку завершения работы.

0

Как и другие, при вызове net stop он будет вызывать OnStop в службе Windows. Если OnStop не убивает все потоки в приложении или не закрывает все правильно, ваша служба может не останавливаться. (Я видел, что это произошло в одном из наших сервисов WCF: мы не закрыли ServiceHost в OnStop, и поэтому приложение не остановилось бы в нашей команде - нам пришлось бы убить процесс вручную.)

Один общий шаблон, который я видел, - это попытаться вызвать остановку в службе, и если он не умрет в течение таймаута (10 секунд), убейте процесс силой. В качестве альтернативы пакетным файлам PowerShell имеет довольно хорошую поддержку для работы с сервисами.

+0

Я предполагаю, что этот комментарий более специфичен для .NET-службы - не уверен, что службы не-.NET останавливаются внутри ... –

Смежные вопросы