【问题标题】:Multiple service processes (System.ServiceProcess.ServiceBase) in one Windows Service一个 Windows 服务中的多个服务进程 (System.ServiceProcess.ServiceBase)
【发布时间】:2015-05-12 03:15:51
【问题描述】:

我有两个服务进程(源自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 数组中的第一项。

有什么想法吗?

【问题讨论】:

  • 当您执行ServiceBase.Run(new MyService1()); 后跟ServiceBase.Run(new MyService2()); 时会发生什么?另外,两者是否有任何类型的相互依赖或相互交流?
  • @Dwight 无依赖性。目前,除了登录到(他们自己的)文件之外,他们不做任何事情。我尝试分别运行两者。结果相同。只有一个(第一个)运行。

标签: c# .net visual-studio debugging service


【解决方案1】:

我终于在这里找到了答案: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。我不需要这个,因为它们不相互依赖。

【讨论】:

  • 您发现哪些具体的问题适合您?
  • 你拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多