我有两个服务流程(源自System.ServiceProcess.ServiceBase
)
MyService1
和MyService2
。
我试图在Windows服务Main()
的{{1}}中运行它们。
Programm.cs
在static void Main()
{
ServiceBase[] servicesToRun = { new MyService1(), new MyService2() };
ServiceBase.Run(servicesToRun);
}
和OnStart
的{{1}}方法中,我写入日志文件,以便告诉它们正在运行。
系统构建良好,我可以安装该服务。
但只有MyService1
才会运行。 MyService2
没有做任何事情(即没有启动日志条目)。当我更改数组中的顺序时:
MyService1
仅运行MyService2
。
为了试图深入了解这一点,我使用了一个小工具AndersonImes.ServiceProcess.ServicesLoader(https://windowsservicehelper.codeplex.com/)来解决您无法在Visual Studio中直接调试Windows服务的限制。使用此工具,我可以同时启动和运行服务ServiceBase[] servicesToRun = { new MyService2(), new MyService1() }
和MyService2
。但我仍然不知道为什么Windows只运行MyService1
数组中的第一项。
有什么想法吗?
答案 0 :(得分:5)
我终于找到了答案:http://www.bryancook.net/2008/04/running-multiple-net-services-within.html。一个隐藏的资源,谢谢'bryan'!希望这有助于下一个开发人员节省时间......
ServDependedOn周围的解释与我在项目中看到的不完全相符。这不是关于启动它们,而是确保它们已经启动。查看https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.servicesdependedon%28v=vs.110%29.aspx。我不需要这个,因为他们不相互依赖。