C# Topshelf Windows服务安装从未完成

C# Topshelf Windows服务安装从未完成,c#,powershell,windows-services,topshelf,octopus,C#,Powershell,Windows Services,Topshelf,Octopus,我有三个windows服务,都是使用TopShelf创建的。这三个项目的配置非常相似,所以我更新了我的三个项目,以使用共享框架类型的项目 public void StartService() { HostFactory.New(x => { x.Service<IService>(s => { s.ConstructUsing(() =>_ser

我有三个windows服务,都是使用TopShelf创建的。这三个项目的配置非常相似,所以我更新了我的三个项目,以使用共享框架类型的项目

public void StartService()
    {
        HostFactory.New(x =>
        { 
            x.Service<IService>(s =>
            {
                s.ConstructUsing(() =>_service);
                s.WhenStarted(poller => poller.Start());
                s.WhenStopped(poller => poller.Stop());
             });

            x.EnableShutdown();
            x.RunAsLocalSystem();
            x.SetDescription(description);
            x.SetDisplayName(display);
            x.SetServiceName(name);
            x.StartAutomatically();

            x.OnException(ex =>
            {
                ExceptionManager.Publish(ex);
            });

            x.EnableServiceRecovery(rc =>
            {
                rc.RestartService(1);
                rc.RestartService(1);
                rc.RestartService(1);
            });


        }).Run();
    }
public void StartService()
{
HostFactory.New(x=>
{ 
x、 服务(s=>
{
s、 使用(()=>\u服务)进行构造;
s、 开始时(poller=>poller.Start());
s、 停止时(poller=>poller.Stop());
});
x、 启用关机();
x、 RunAsLocalSystem();
x、 设置描述(描述);
x、 SetDisplayName(显示);
x、 SetServiceName(名称);
x、 StartAutomatically();
x、 OneException(ex=>
{
例外管理器发布(ex);
});
x、 启用ServiceRecovery(rc=>
{
rc.餐厅服务(1);
rc.餐厅服务(1);
rc.餐厅服务(1);
});
}).Run();
}
要部署这些服务,八达通中有一个步骤可以为每个服务运行。该步骤执行以下操作:(所有命令都使用powershell运行)

  • D:\myservicename.exe停止
  • D:\myservicename.exe卸载
  • 将新代码部署到文件夹目标
  • D:\myservicename.exe安装
  • D:\myservicename.exe启动
  • 这对我的两项服务仍然有效。对于第三个服务,命令生效,但似乎从未结束。我已经在powershell中的服务器和命令行上手动运行了这些,我也遇到了同样的问题。正在运行的命令将生效,但永远不会结束。我必须按Ctrl+C组合键才能停止它

    我想这项服务可能被卡住了,所以我试着用sc-delete卸载它,然后重新启动这个盒子,但没有效果。这三个服务在启动时都在正常运行

    在此更改之前,所有三个服务都可以正常工作并部署。当我将启动服务方法放回到给我带来麻烦的服务的主方法中时,它就起作用了

    以前有人遇到过这种情况吗?有没有一种方法可以告诉命令等待,直到它得到正确的响应?或者,如果这里确实发生了错误,是否有办法获得更多详细信息