我的 Windows 服务是具有大量缓存的数据服务器。在服务 OnStop 期间,我保存了缓存,这样就不会丢失任何数据。保存缓存可能需要几分钟,所以为了防止 Windows 服务管理器超时,我使用 SetServiceStatus Win32 回调:
this.serviceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
this.serviceStatus.checkPoint = 1;
this.serviceStatus.waitHint = 60000;
SetServiceStatus(Process.GetCurrentProcess().Handle, ref this.serviceStatus);
这很好用。
我还将 CanShutdown 设置为 true 并添加了 OnShutdown 以便该服务可以防止系统关闭。在这里,我有效地做与 OnStop 相同的事情:
protected override void OnShutdown()
{
this.OnStop();
base.OnShutdown();
}
这不太好。当系统关闭时,当缓存被保存时,我得到“设备未准备好”。这表明 Windows 在停止/关闭之前中止服务。用 SetServiceStatus 来防止这种情况显然是行不通的。
如何获得更多时间(延迟重启)来完成保存?
欢迎任何建议。