С# service - OnStart() v Конструктор
Я пытаюсь понять разницу между OnStart()
и конструктором в ServiceBase
производном классе. Из чтения вокруг кажется, что при первом запуске службы (после включения вашей машины) вызывается конструктор. После этого вы можете остановить и запустить службу столько раз, сколько захотите, но конструктор никогда не будет вызываться снова, каждый раз будет вызываться только метод OnStart()
. Кто-нибудь может подтвердить?
Спасибо
Ответы
Ответ 1
Не используйте конструктор для выполнения обработки, которая должна находиться в OnStart
. Используйте OnStart
для обработки всей инициализации вашей службы. Конструктор вызывается при запуске исполняемого файла приложения, а не при запуске службы. Исполняемый файл выполняется до OnStart
. Когда вы продолжаете, например, конструктор не вызывается снова, потому что SCM
уже содержит объект в памяти. Если OnStop
освобождает ресурсы, выделенные в конструкторе, а не в OnStart
, необходимые ресурсы не будут создаваться снова во второй раз, когда вызывается служба.
MSDN
Ответ 2
Небольшой вариант заключается в том, что он зависит от того, содержит ли он одну услугу или несколько служб. Здесь строка из docs
Если исполняемый файл содержит один службы, система вызывает сервис-конструктор, когда Start выбранный из SCM, и запускает деструктор, если вызывается Stop.
Если исполняемый файл содержит несколько услуги, вызов Начать с одной службы вызывает вызов конструкторов для всех служб в исполняемом файле, но только указанная услуга начал. Деструкторы для служб запускаются вместе, когда все службы были остановлены, а не индивидуально когда каждая служба остановлена.
Но, вероятно, ответ на oxilumin - это то, что вам нужно.
Ответ 3
Да, это правильно. Конструктор вызывается один раз для нагрузки, и запуск может произойти, когда пользователь (или автоматизация) запускает и останавливает службу.