Служба windows по сути представляет собой приложение с несколькими дополнительными методами, предоставляемыми диспетчеру службы для управления им, а именно: Stop()
, Start()
, Pause()
, Continue()
(или эквивалентами).
Когда вызывается Start, создается домен приложения, инициализируется класс обслуживания и вызывается метод Start()
. При остановке метод Stop()
вызывается перед выгрузкой домена приложения из памяти.
Вы можете увидеть это с помощью диспетчера задач. Приложение не существует в памяти до тех пор, пока не будет вызван запуск, и оно исчезнет после завершения остановки.
Поэтому я считаю, что ответ на ваш вопрос жизненного цикла заключается в жизненном цикле стандартного приложения .NET, будь то командная строка, winforms или asp.net.
Я бы также советовал, что если вы зависите от метода Dispose, то, вероятно, где-то в вашей структуре лежит недостаток, при большинстве случаев ресурсы, очищаемые Dispose, должны удаляться чаще, чем когда Service Service Host вызывает ваш компонент для удаления. Большинство сервисов - это просто механизм для ответа на системное событие где-то, в тех случаях, когда это событие происходит от неуправляемого ресурса, вы, вероятно, захотите только захватить ресурс OnStart и освободить его OnStop, в ситуациях, когда событие не происходит в неуправляемом ресурсе. пространство, то вы, вероятно, захотите захватить и освободить неуправляемые ресурсы более типичным способом JustInTime, где вы можете захватить их как ресурс только тогда, когда они вам нужны, и освободить их (с помощью их метода Dispose), как только сможете. Для дальнейшего прочтения ознакомьтесь с Когда и как использовать dispose и .Net dispose pattern