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

标签 windows-services service .net-services

我的问题本质上与以下问题相同,但答案对我没有帮助。

.NET Windows Service - multiple services in one project

本质上,我有 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 服务项目(如下),它为每个服务使用一个项目安装程序。然后我添加了一个安装程序项目,它将服务安装到服务管理器中。这是我的工作流程:


  1. 在 Visual Studio 2008 的解决方案中创建 3 个服务。将每个服务命名为 Service1、Service2 和 Service3。 (确保将实际服务名称更改为属性窗口中各自的名称。)
  2. 向此解决方案添加了一个安装程序项目。
  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)的 Main 入口点中,我将 ServicesToRun 变量设置为包含我希望其运行的所有服务(ServiceA 和 ServiceB)的 ServiceBase 数组。这是重要的一步,因为服务管理器根据此处的参数数量设置属性 - 要么允许同一 exe 的多个实例,要么只允许单个实例。
  6. 添加安装程序项目并使用服务的输出。
  7. 使用服务的输出添加自定义操作。

代码仍然可以从上述相同的链接下载。

谢谢!

关于windows-services - 我可以在单个 Windows 可执行文件中托管多个服务吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688275/

相关文章:

.net - 配置系统无法初始化 - Windows Service .NET

asp.net - 如何为 .Net 网站、Windows 服务等创建安装程序?

Android - 为服务实现 startForeground?

c# - .NET 服务系统.Net.Sockets.SocketException : 'No such host is known'

service - 当面向消息的中间件完成这项工作时,为什么还要为服务发现而烦恼?

android - 服务停止申请最近清除

.net - 确定应用程序池上次回收的时间

c# - Windows 服务中的语音识别引擎未触发事件

multithreading - 我怎样才能完成ThreadPool.Join?

mongodb - 无法启动mongodb服务