如何在 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 的任何实现(例如 HostRun()s 您的 ServiceBase)。

您可以通过将调用分别转发给 WindowsHostEnvironmentWindowsServiceHost 类 来重用其他 HostEnvironment / Host 方法的实现。 WindowsHostEnvironment 实例可以简单地在您的自定义 EnvironmentBuilder 构造函数中创建(并传递到自定义 HostEnvironment)。