Подтвердить что ты не робот

С# service - OnStart() v Конструктор

Я пытаюсь понять разницу между OnStart() и конструктором в ServiceBase производном классе. Из чтения вокруг кажется, что при первом запуске службы (после включения вашей машины) вызывается конструктор. После этого вы можете остановить и запустить службу столько раз, сколько захотите, но конструктор никогда не будет вызываться снова, каждый раз будет вызываться только метод OnStart(). Кто-нибудь может подтвердить?

Спасибо

4b9b3361

Ответ 1

Не используйте конструктор для выполнения обработки, которая должна находиться в OnStart. Используйте OnStart для обработки всей инициализации вашей службы. Конструктор вызывается при запуске исполняемого файла приложения, а не при запуске службы. Исполняемый файл выполняется до OnStart. Когда вы продолжаете, например, конструктор не вызывается снова, потому что SCM уже содержит объект в памяти. Если OnStop освобождает ресурсы, выделенные в конструкторе, а не в OnStart, необходимые ресурсы не будут создаваться снова во второй раз, когда вызывается служба. MSDN

Ответ 2

Небольшой вариант заключается в том, что он зависит от того, содержит ли он одну услугу или несколько служб. Здесь строка из docs

Если исполняемый файл содержит один службы, система вызывает сервис-конструктор, когда Start выбранный из SCM, и запускает деструктор, если вызывается Stop.

Если исполняемый файл содержит несколько услуги, вызов Начать с одной службы вызывает вызов конструкторов для всех служб в исполняемом файле, но только указанная услуга начал. Деструкторы для служб запускаются вместе, когда все службы были остановлены, а не индивидуально когда каждая служба остановлена.

Но, вероятно, ответ на oxilumin - это то, что вам нужно.

Ответ 3

Да, это правильно. Конструктор вызывается один раз для нагрузки, и запуск может произойти, когда пользователь (или автоматизация) запускает и останавливает службу.