【问题标题】:c#: How do I run multiple windows services as one service?c#:如何将多个windows服务作为一项服务运行?
【发布时间】:2011-06-21 21:19:20
【问题描述】:

我在一个 C# 项目中有三个 Windows 服务。使用安装程序类(它包含三个服务安装程序和一个进程安装程序),我能够安装我的所有服务并将它们作为三个不同的 Windows 服务启动。

现在我试图在一个服务名称下运行这些服务(我希望在服务控制管理器中看到一个服务名称,而不是三个)。最好的方法是什么?

提前致谢!

【问题讨论】:

    标签: c# windows-services


    【解决方案1】:

    您可以只拥有一个主要服务,将其他可执行文件作为常规进程生成(请参阅Process.Start(..)),这些服务不会显示为 Windows 服务。该服务必须控制依赖进程的生命周期(在服务启动后启动它们/在关闭前停止它们)。

    【讨论】:

    • 当您提到 Process.Start(..) 时,您是指 System.Diagnostics 命名空间中的 Process 类吗?
    • @CuriouGeorge:是的,我就是这个意思。
    【解决方案2】:

    新建一个windows服务并启动3个线程。

    【讨论】:

    • 但这并没有给你任何形式的服务之间的隔离,从稳定性的角度来看这可能是有问题的。不过,也许 AppDomains 可以在这里提供帮助。
    【解决方案3】:

    您所要做的就是实现一些代码重用原则。

    将每个相应的工作单元移动到类/库而不是服务中。创建一个引用最终结果库的服务。您的服务意图可能是某种计时器,并且可能会暴露 API 端点。创建单个服务并从 3 个独特的计时器中激活必要的类(如果需要 - 您可能会使用单个计时器来激活 3 个不同的类方法)。以类似的方式包装事件或 API 端点。服务应该包含很少或不包含“业务”逻辑,它应该从引用的业务库中派生该工作。遵循这种做法,您的问题将主要回答它自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多