我可以在单个Windows可执行文件中托管多个服务吗?

use*_*559 23 service windows-services .net-services

我的问题与下面的问题基本相同,但答案对我没有帮助.

.NET Windows服务 - 一个项目中的多个服务

基本上,我有3个服务,比如说"Service1","Service"和"Service3".

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

ServiceBase.Run(ServicesToRun);
Run Code Online (Sandbox Code Playgroud)

我还为每个服务都安装了相应的serviceInstaller.ServiceName ="ServiceX"的安装程序类.

当我使用installutil时,我确实在服务管理器上看到了所有3个服务.但是,当我启动它们(其中任何一个或全部)时,只有第一个("Service1")正在运行.

我知道这是微不足道的,我可能会为这些中的每一个都有不同的安装程序项目,但在我的情况下,它在语义上更有意义,只使用一个

非常感谢您的帮助

谢谢Venu

Sco*_*ott 21

我创建了一个3服务项目(下面),它为每个服务使用项目安装程序.然后我添加了一个安装程序项目,将服务安装到服务管理器中.这是我的工作流程:


  1. 在Visual Studio 2008中的解决方案中创建3个服务.将每个服务命名为Service1,Service2和Service3.(确保在属性窗口中将实际服务名称更改为各自的名称.)
  2. 为此解决方案添加了一个Installer项目.
  3. 将三个服务项目的项目输出添加到安装程序项目中.
  4. 为安装程序中的所有三个服务添加了自定义操作,以便在服务管理器中安装服务.
  5. 建造和安装.

这为我提供了服务管理器中的三种不同服务:Service1,Service2和Service3

请享用!

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

编辑:

我已经更新了存储库中的代码,只有一个可执行文件,但有两个服务.每个服务都以自己的名称和启动/停止的能力安装到服务管理器.我想这就是你想要的,对吗?这是我做的:

  1. 创建了一个服务项目.
  2. 为同一项目添加了第二项服务(具有唯一的服务名称).
  3. 为两个服务(ServiceA和ServiceB)添加了安装程序.
  4. 在ProjectInstaller.Designer.vb文件中,我更改了Me.Installers.AddRange行以显示两个服务安装程序.(Me.ServiceInstaller1,Me.ServiceInstaller2)
  5. 在主服务的主入口点(在我的例子中是ServiceA),我将ServicesToRun变量设置为ServiceBase数组,其中包含我希望它运行的所有服务(ServiceA和ServiceB).这是一个重要的步骤,因为服务管理器根据此处的参数数量设置属性 - 要么允许同一个exe的多个实例,要么只允许单个实例.
  6. 添加安装程序项目并使用服务的输出.
  7. 使用"服务"的输出添加自定义操作.

代码仍然可以从上面的相同链接下载.

谢谢!

  • 外部链接没有内容。 (2认同)