【发布时间】:2015-05-12 03:15:51
【问题描述】:
我有两个服务进程(源自System.ServiceProcess.ServiceBase)
MyService1 和 MyService2。
我正在尝试在 Windows 服务的 Programm.cs 的 Main() 中运行它们。
static void Main()
{
ServiceBase[] servicesToRun = { new MyService1(), new MyService2() };
ServiceBase.Run(servicesToRun);
}
在MyService1 和MyService2 的OnStart 方法中,我写入了一个日志文件,这样我就可以知道它们正在运行。
系统构建良好,我可以安装服务。
但只有MyService1 运行。 MyService2 不做任何事情(即没有启动日志条目)。当我改变数组中的顺序时:
ServiceBase[] servicesToRun = { new MyService2(), new MyService1() }
只有MyService2 运行。
为了解决这个问题,我使用了一个小工具 AndersonImes.ServiceProcess.ServicesLoader (https://windowsservicehelper.codeplex.com/) 来解决不能在 Visual Studio 中直接调试 Windows 服务的限制。使用这个工具,我可以让MyService1 和MyService2 两个服务同时启动和运行。但我还是不知道为什么 Windows 只运行ServiceBase[] servicesToRun 数组中的第一项。
有什么想法吗?
【问题讨论】:
-
当您执行
ServiceBase.Run(new MyService1());后跟ServiceBase.Run(new MyService2());时会发生什么?另外,两者是否有任何类型的相互依赖或相互交流? -
@Dwight 无依赖性。目前,除了登录到(他们自己的)文件之外,他们不做任何事情。我尝试分别运行两者。结果相同。只有一个(第一个)运行。
标签: c# .net visual-studio debugging service