C # сервис - OnStart () v Конструктор - PullRequest
16 голосов
/ 13 мая 2011

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

Спасибо

Ответы [ 3 ]

16 голосов
/ 13 мая 2011

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

4 голосов
/ 13 мая 2011

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

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

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

Но ответ оксилумина, вероятно, такой, какой вы ищете.

2 голосов
/ 13 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...