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

Создать зависимость между запуском служб Windows

Я создал службу Windows, которая запускается автоматически. Эта служба подключается к службе базы данных при запуске. Проблема заключается в том, что служба баз данных запускается после моего обслуживания. Существует ли программный способ определить эту зависимость, чтобы моя служба запускалась после запуска службы базы данных.

Я нашел эту статью http://www.boyce.us/windows/servertipcontent.asp?ID=7, в которой говорится о добавлении записи реестра для этого. Я хотел бы знать, есть ли способ С# для этого?

Update:

Добавление к вышеуказанному вопросу. Вот еще один сценарий. Сервисы устанавливаются с помощью installshied, для которого не требуется projectinsaller. Кажется, installshield ищет классы, происходящие из класса ServiceBase, и устанавливает каждую службу. Как добавить зависимость в таком сценарии?

4b9b3361

Ответ 1

Вы ищете ServiceInstaller.ServicesDependedOn Property для компонента ProjectInstaller вашего проекта.

В разделе "Примечания" (и я выделил интересующую вас часть):

Услуга может потребовать другие услуги перед запуском. информация от этого объекта записанные на ключ в реестре. когда пользователь (или система, в случае автоматического запуска) пытается запустить службы, диспетчер управления сервисом (SCM) проверяет, что каждый из службы в массиве уже начало.

Если какая-либо служба в массиве не затем SCM пытается запустить их. Сюда входят услуги с Manual StartType.

Если какая-либо услуга, по которой эта услуга зависит не запускается, эта услуга не запустится. Исключением не является если система не запущена потому что обработка исключений отсутствует на уровне системы, чтобы обнаружить это. Решите, как обрабатывать запуск службы сбоев и реализовать это в своих код. Как правило, появляется диалоговое окно при запуске службы при запуске службы для начала.

Если служба не запускается, запись записывается в приложение журнал событий.

Услуги, по которым эта услуга зависит не обязательно в том же исполняемый файл.

Ответ 2

В дополнение к ответу Jay Riggs, здесь и пример того, что вы должны добавить в службу установки, чтобы ваша служба зависела от eventlog

Me.ServiceInstaller1.ServiceName = "Service1";
Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"};

Конечно, если у вас есть другая зависимость службы, измените "Eventlog" на что-то еще.