Должен ли я реализовать метод Stop в службе Windows?

Я смотрю на какой-то устаревший код в форме службы Windows.

Я заметил, что в их методе OnStop() они просто записывают в журнал событий, однако нет никакой очистки объекта или контроля завершения каких-либо потоков. Есть 2 фоновых потока, которые запускаются при запуске службы, так что мне интересно, действительно ли эта служба останавливается? И, если это произойдет, правильно ли закрыты темы?

Является ли метод stop физически завершающим процесс или это только логическая остановка, которая, если ее не реализовать, на самом деле ничего не делает?

3 ответа

Остановка службы - это не то же самое, что ее остановка. Это логичное условие. Администратор будет ожидать, что вы перестанете делать то, что делаете после запуска службы. Таким образом, ваш сервис не мешает тому, что он собирается делать дальше. Скажем, резервное копирование каталога или редактирование файла конфигурации и так далее.

Вы не должны на самом деле реализовать это. Windows также не навязывает это, менеджер сервисов берет ваше слово, когда вы сообщаете, что вы остановились, и не мешает вам что-либо делать. Но, конечно, рискует запутать администратора.

Метод OnStop() вызывается, когда служба останавливается, вы можете очистить объекты и остановить потоки и т. Д. Здесь. Если вашему потоку не нужно делать ничего особенного, когда служба остановлена, вы можете оставить метод OnStop.

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

Чтобы ответить на первый вопрос, это прекращает процесс. Но он должен реализовывать код очистки, потому что по общему сценарию вы оставляете поток работающим в службе, и он останавливается, но процесс все равно будет там из-за потока. У меня был такой же опыт работы с левым потоком, поэтому мы должны реализовать код очистки потока и другие ресурсы, которые могут помешать завершению процесса.

Другие вопросы по тегам