我们使用Topshelf(4.0.1)创建了一个Windows服务。有没有办法在操作系统关闭期间如何延迟它停止?
我知道这很有问题,所以解释一下:让我们说我们已经赢得了服务,在关机期间需要一些额外的时间(一些任务必须正确完成,而且现在我们有无法如何更快地执行)。
可以通过调用服务Stop-Service
中的RequestAdditionalTime()
来延迟标准服务停止(例如通过Powershell OnStop()
cmdlet执行...)。在这样的"标准"中停止服务时一切正常。方式......但是在系统关闭期间不能使用RequestAdditionalTime()
(即Windows服务OnShutdown()
)。因此,我已经在经典的Windows服务中实现了这个SO answer方法,并且实现了3:20延迟(这就是我们需要的)。
但提到SO答案解决方案(黑客,更好的说法)并不适用于Topshelf。
Topshelf怎么办?
答案 0 :(得分:1)
应该可以在EnvironmentBuilder
实例上注册自定义UseEnvironmentBuilder
(使用扩展方法HostConfigurator
),返回HostEnvironment
接口的自定义实现。 HostEnvironment.CreateServiceHost
方法的自定义实现可以返回您需要的Host
的任何实现(例如,Host
ServiceBase
HostEnvironment
}。
您可以通过分别转发到Host
和WindowsHostEnvironment
类的调用来重用其他WindowsServiceHost
/ WindowsHostEnvironment
方法的实现。可以在自定义EnvironmentBuilder
构造函数中简单地创建HostEnvironment
实例(并传递到自定义Fiddler.FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete;
Fiddler.FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.Default);
Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session oS)
{
Monitor.Enter(oAllSessions);
oAllSessions.Add(oS);
Monitor.Exit(oAllSessions);
};
Fiddler.FiddlerApplication.Shutdown();
)。