如何在 OS 关机期间延迟停止 Topshelf 服务
How to delay Topshelf service stopping during OS shutdown
我们有一个使用 Topshelf (4.0.1) 创建的 windows 服务。有什么办法可以在操作系统关闭期间延迟它的停止?
我知道这是一个非常有问题的愿望,所以解释一下:假设我们有赢得服务,在关闭期间需要一些额外的时间(一些任务必须正确完成,现在我们没有办法如何执行得更快)。
可以通过在服务 OnStop()
中调用 RequestAdditionalTime()
来延迟标准服务停止(例如由 Powershell Stop-Service
cmdlet 等执行)。以这种 "standard" 方式停止服务时一切正常...但是在系统关闭期间无法使用 RequestAdditionalTime()
(即 windows 服务 OnShutdown()
)。因此,我在经典 windows 服务中实施了此 SO answer 批准,并且由此实现了 3:20 延迟(这就是我们需要的)。
但提到的 SO 答案解决方案(hack,更确切地说)不适用于 Topshelf。
有什么方法可以用 Topshelf 做到吗?
应该可以注册自定义 EnvironmentBuilder
(在 HostConfigurator
实例上使用扩展方法 UseEnvironmentBuilder
),return 是 [=13] 的自定义实现=] 界面。 HostEnvironment.CreateServiceHost
方法的自定义实现可以 return 您需要的 Host
的任何实现(例如 Host
即 Run()
s 您的 ServiceBase
)。
您可以通过将调用分别转发给 WindowsHostEnvironment
和 WindowsServiceHost
类 来重用其他 HostEnvironment
/ Host
方法的实现。 WindowsHostEnvironment
实例可以简单地在您的自定义 EnvironmentBuilder
构造函数中创建(并传递到自定义 HostEnvironment
)。
我们有一个使用 Topshelf (4.0.1) 创建的 windows 服务。有什么办法可以在操作系统关闭期间延迟它的停止?
我知道这是一个非常有问题的愿望,所以解释一下:假设我们有赢得服务,在关闭期间需要一些额外的时间(一些任务必须正确完成,现在我们没有办法如何执行得更快)。
可以通过在服务 OnStop()
中调用 RequestAdditionalTime()
来延迟标准服务停止(例如由 Powershell Stop-Service
cmdlet 等执行)。以这种 "standard" 方式停止服务时一切正常...但是在系统关闭期间无法使用 RequestAdditionalTime()
(即 windows 服务 OnShutdown()
)。因此,我在经典 windows 服务中实施了此 SO answer 批准,并且由此实现了 3:20 延迟(这就是我们需要的)。
但提到的 SO 答案解决方案(hack,更确切地说)不适用于 Topshelf。
有什么方法可以用 Topshelf 做到吗?
应该可以注册自定义 EnvironmentBuilder
(在 HostConfigurator
实例上使用扩展方法 UseEnvironmentBuilder
),return 是 [=13] 的自定义实现=] 界面。 HostEnvironment.CreateServiceHost
方法的自定义实现可以 return 您需要的 Host
的任何实现(例如 Host
即 Run()
s 您的 ServiceBase
)。
您可以通过将调用分别转发给 WindowsHostEnvironment
和 WindowsServiceHost
类 来重用其他 HostEnvironment
/ Host
方法的实现。 WindowsHostEnvironment
实例可以简单地在您的自定义 EnvironmentBuilder
构造函数中创建(并传递到自定义 HostEnvironment
)。