2

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

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();
    }

要部署这些服务,Octopus 中有一个针对每个服务运行的步骤。该步骤执行以下操作:(所有命令均使用 powershell 运行)

  1. D:\myservicename.exe 停止
  2. D:\myservicename.exe 卸载
  3. 将新代码部署到文件夹目标
  4. D:\myservicename.exe 安装
  5. D:\myservicename.exe 启动

这继续适用于我的两项服务。对于第三个服务,命令生效但似乎永远不会完成。我已经在 powershell 和命令行的服务器上手动运行了这些,我遇到了同样的问题。正在运行的命令生效但永远不会完成。我必须 Ctrl+C 才能停止它。

命令窗口

我认为该服务可能已经卡住了,所以我尝试使用 sc delete 卸载它,然后重新启动该框,但这没有效果。这三个服务在启动时都在正常运行。

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

有没有人遇到过这个?有没有办法告诉命令等到它得到正确的响应?或者有没有办法获得更多细节,如果这里实际上发生了错误?

4

0 回答 0