Могу ли я разместить несколько служб в одном исполняемом файле Windows
-
18-09-2019 - |
Вопрос
Мой вопрос по сути такой же, как и следующий, но ответ мне не помог.
Служба .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.Вот был мой рабочий процесс:
- Создайте 3 службы в решении в Visual Studio 2008.Называя каждую службу как Service1, Service2 и, Service3.(Обязательно измените фактические названия служб на соответствующие им имена в окне свойств.)
- Добавлен проект установщика к этому решению.
- Добавлены выходные данные проекта из трех сервисных проектов в проект установщика.
- Добавлены пользовательские действия для всех трех служб в установщике для установки служб в service Manager.
- Построен и установлен.
Это дает мне три различных сервиса в service manager:Сервис1, Сервис2 и Сервис3
Наслаждайтесь!
http://code.google.com/p/multi-service-install/
Редактировать:
Я обновил код в репозитории, чтобы иметь один исполняемый файл, но две службы.Каждая служба устанавливается в service manager со своим собственным именем и возможностью запуска / остановки.Я думаю, это то, чего ты хочешь, верно?Вот что я сделал:
- Создал сервисный проект.
- Добавлен второй сервис в тот же проект (с уникальным именем сервиса).
- Добавлен установщик для обеих служб (ServiceA и ServiceB).
- В файле ProjectInstaller.Designer.vb я изменил строку Me.Installers.Добавьте диапазон, чтобы отобразить оба установщика служб.(Me.ServiceInstaller1, Me.ServiceInstaller2)
- В основной точке входа основной службы (в моем случае ServiceA) я устанавливаю переменную ServicesToRun в массив ServiceBase, содержащий все службы, которые я хочу, чтобы она запускала (ServiceA и ServiceB).Это важный шаг, поскольку диспетчер служб устанавливает свойство на основе количества приведенных здесь аргументов - либо для разрешения нескольких экземпляров одного и того же exe-файла, либо только одного экземпляра.
- Добавьте проект установщика и используйте выходные данные служб.
- Добавьте пользовательское действие, используя выходные данные служб.
Код по-прежнему можно загрузить по той же ссылке, что и выше.
Спасибо!