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

Могу ли я иметь несколько сервисов, размещенных в одном исполняемом файле Windows?

Мой вопрос по существу тот же, что и следующий, но ответ мне не помог.

Служба .NET Windows - несколько сервисов в одном проекте

По сути, у меня есть 3 службы, скажем, "Service1", "Service" и "Service3".

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
                                {
                                    new Service1("Service1"),
                                    new Service2("Service2"),
                                    new Service3("Service3")
                                };

ServiceBase.Run(ServicesToRun);

У меня также есть классы установщика с соответствующими serviceInstaller.ServiceName = "ServiceX" для каждой из этих служб.

Когда я использую installutil, я вижу все 3 службы в Service Manager. Однако, когда я запускаю их (любой или все из них), запускается только первый ( "Service1" ).

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

Ваша помощь приветствуется

Спасибо Venu

4b9b3361

Ответ 1

Я создал 3 проекта сервиса (ниже), который использует установщик проекта для каждой службы. Затем я добавил проект установщика, который устанавливает службы в диспетчер службы. Вот мой рабочий процесс:


  • Создайте 3 службы в решении в Visual Studio 2008. Именование каждой службы как Service1, Service2 и Service3. (Обязательно измените имена реальных сервисов на их соответствующие имена в окне свойств.)
  • В это решение добавлен проект установщика.
  • Добавлены результаты проекта из трех проектов обслуживания в проект установщика.
  • Добавлены настраиваемые действия для всех трех служб в установщике для установки служб в диспетчере сервисов.
  • Построено и установлено.

Это дает мне три различных сервиса в сервис-менеджере: Service1, Service2 и Service3


Наслаждайтесь!

http://code.google.com/p/multi-service-install/

EDIT:

Я обновил код в репозитории, чтобы иметь одну исполняемую, но две службы. Каждая служба устанавливается в диспетчер службы с собственным именем и возможностью запуска/остановки. Я думаю, что это то, чего ты хочешь, правильно? Вот что я сделал:

  • Создал сервисный проект.
  • Добавлена ​​вторая услуга в тот же проект (с уникальным именем службы).
  • Добавлен установщик для обеих служб (ServiceA и ServiceB).
  • В файле ProjectInstaller.Designer.vb я изменил строку Me.Installers.AddRange, чтобы показать оба установщика службы. (Me.ServiceInstaller1, Me.ServiceInstaller2)
  • В главной точке входа основной службы (ServiceA в моем случае) я установил переменную ServicesToRun в массив ServiceBase, содержащий все службы, которые я хочу запустить (ServiceA и ServiceB). Это важный шаг, так как диспетчер сервиса устанавливает свойство на основе количества аргументов здесь - либо для того, чтобы разрешить несколько экземпляров одного и того же exe или только одного экземпляра.
  • Добавьте проект установщика и используйте выходные данные служб.
  • Добавить настраиваемое действие с помощью вывода служб.

Код можно загрузить по той же ссылке, что и выше.

Спасибо!