尝试运行多个Windows服务实例时出错

时间:2017-03-20 22:42:11

标签: .net windows-services

我正在尝试在同一台服务器上运行多个服务实例,以支持多种环境。

我尝试按照建议herehere修改ServiceInstaller.ServiceName。

但是,MSDN says“ServiceName必须与[Service]类的ServiceBase.ServiceName相同。”

忽略MSDN,在看到我上面链接的两个页面后,无论如何我都试着这样做了。但是,当我这样做时,我收到一条错误消息,“Windows无法在本地计算机上启动{Display Name}服务。错误1083:此服务配置为运行的可执行程序未实现该服务。”

This answer确认这是该错误的解释。

1 个答案:

答案 0 :(得分:0)

这困扰了我很长一段时间。然后,当我第5次阅读this Q&A时,有什么东西击中了我。

那篇文章没有使用动态名称,但我注意到它在Main函数中设置了ServiceBase.ServiceName。在我看来,也许我可以动态地做同样的事情,并且它有效。

我的主要功能现在看起来像这样:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new Service1(), 
            new Service2(),
            new Service3()
        };

        foreach (serviceBase Service in ServicesToRun)
        {
            service.ServiceName = FunctionToComputeDynamicName(service);
        }
        ServiceBase.Run(ServicesToRun);
    }

我在安装时从Installer.Context获取名称,在运行时从App.config获取名称。如果您需要,也可以使用Args []版本的Main。

轻松获取运行时名称