一个Windows服务中的多个服务进程(System.ServiceProcess.ServiceBase)

我有两个服务进程(派生自System.ServiceProcess.ServiceBaseMyService1MyService2

我正在尝试在Windows服务的Programm.csMain()中运行它们。

 static void Main() { ServiceBase[] servicesToRun = { new MyService1(), new MyService2() }; ServiceBase.Run(servicesToRun); } 

MyService1MyService2OnStart方法中,我写入日志文件,以便我可以告诉它们正在运行。

系统构建良好,我可以安装该服务。

但只有MyService1运行。 MyService2没有做任何事情(即没有启动日志条目)。 当我更改数组中的顺序时:

 ServiceBase[] servicesToRun = { new MyService2(), new MyService1() } 

只有MyService2运行。

为了试图深究这一点,我正在使用一个小工具AndersonImes.ServiceProcess.ServicesLoader( https://windowsservicehelper.codeplex.com/ )来解决您无法在Visual Studio中直接调试Windows服务的限制。 使用此工具,我可以使两个服务MyService1MyService2一起启动并运行。 但我仍然不知道为什么Windows只运行ServiceBase[] servicesToRun数组中的第一项。

有任何想法吗?

我终于找到了答案: http : //www.bryancook.net/2008/04/running-multiple-net-services-within.html 。 一个隐藏的资源,谢谢’bryan’! 希望这有助于下一个开发人员节省时间……

ServicesDependedOn周围的解释与我在项目中看到的不完全相符。 这不是关于启动它们,而是确保它们已经启动。 查看https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.servicesdependedon%28v=vs.110%29.aspx 。 我不需要这个,因为他们不相互依赖。