Могу ли я разместить несколько служб в одном исполняемом файле Windows

StackOverflow https://stackoverflow.com/questions/1688275

Вопрос

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

Служба .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 службы в диспетчере служб.Однако, когда я запускаю их (любой или все из них), запускается только первый ("Service1").

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

Мы ценим вашу помощь

Спасибо Место

Это было полезно?

Решение

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


  1. Создайте 3 службы в решении в Visual Studio 2008.Называя каждую службу как Service1, Service2 и, Service3.(Обязательно измените фактические названия служб на соответствующие им имена в окне свойств.)
  2. Добавлен проект установщика к этому решению.
  3. Добавлены выходные данные проекта из трех сервисных проектов в проект установщика.
  4. Добавлены пользовательские действия для всех трех служб в установщике для установки служб в service Manager.
  5. Построен и установлен.

Это дает мне три различных сервиса в service manager:Сервис1, Сервис2 и Сервис3

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

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

Редактировать:

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

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

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

Спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top