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

Eas*_*one 7 .net c# debugging service visual-studio

我有两个服务流程(来自System.ServiceProcess.ServiceBaseMyService1MyService2

我正在尝试在Main()Windows Service的中运行它们Programm.cs

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

在这OnStart两种方法中MyService1MyService2我都将其写入日志文件,以便可以判断它们是否正在运行。

系统运行良好,我可以安装该服务。

但只能MyService1运行。MyService2什么都不做(即没有启动日志条目)。当我更改数组中的顺序时:

ServiceBase[] servicesToRun = { new MyService2(), new MyService1() }
Run Code Online (Sandbox Code Playgroud)

MyService2运行。

为了深入了解这一点,我使用了一个小工具AndersonImes.ServiceProcess.ServicesLoader(https://windowsservicehelper.codeplex.com/)来解决无法在Visual Studio中直接调试Windows服务的局限性。有了这个工具,我既可以得到服务MyService1MyService2又可以彼此启动和运行。但是我仍然不知道为什么Windows仅运行ServiceBase[] servicesToRun数组中的第一项。

有任何想法吗?

Eas*_*one 7

我终于在这里找到了答案:http : //www.bryancook.net/2008/04/running-multiple-net-services-within.html。一个很好的隐藏资源,谢谢“布莱恩”!希望这可以帮助下一个开发人员节省时间。

但是,关于ServicesDependedOn的解释与我在项目中看到的并不完全匹配。这不是要启动它们,而是要确保它们已启动。还要查看https://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicecontroller.servicesdependedon%28v=vs.110%29.aspx。我不需要这个,因为它们彼此不依赖。