我有三个使用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运行)
这继续适用于我的两项服务。对于第三个服务,命令生效但似乎永远不会完成。我在powershell和命令行中在服务器上手动运行这些,我遇到了同样的问题。正在运行的命令生效但永远不会完成。我必须按Ctrl + C才能停止它。
我认为该服务可能已被卡住一些,所以我尝试使用sc delete卸载它然后重新启动该框,但这没有任何效果。启动时,所有三个服务都正常运行。
在此更改之前,所有三项服务都可以正常工作和部署。当我将启动服务方法放回到给我带来麻烦的服务的主要方法时,它可以工作。
之前有没有遇到过这个?有没有办法告诉命令等待它得到正确的响应?或者有没有办法获得更多细节,如果这里确实发生了错误?