RequestAdditionalTime无效

时间:2015-06-03 06:26:06

标签: c# windows windows-services service-control-manager

我有一个将文件导入数据库的Windows服务。当服务收到停止通知时,它应该尽可能完成当前导入。可能需要几分钟才能完成 因此,我使用ServiceBase.RequestAdditionalTime方法向SCM发出信号,告知服务仍在运行和可操作。

protected override void OnStop()
{
   var waitTime = TimeSpan.FromSeconds(5);
   var additionalWaitTime = TimeSpan.FromMinutes(3);

   Trace.Write("Stopping service...");

   var task = Task.Factory.StartNew(() => worker.Stop());
   while (!task.Wait(waitTime))
   {
     Trace.Write("Requesting additional time...");

     RequestAdditionalTime((int)additionalWaitTime.TotalMilliseconds);

     Trace.Write("Waiting for {1} to complete...");
   }

   Trace.Write("Service stopped.");
}

在测试时,我无法使用RequestAdditionalTime方法找到服务的任何不同行为。如果我删除RequestAdditionalTime调用,则服务的行为方式相同:

  • 在服务停止时,SCM等待大约2分钟并报告服务没有响应(错误1053)。之后,服务状态保持Stopping,直到我的工作人员完成。
  • 在关机时,系统不会等待额外的时间。它似乎在5秒后终止所有服务(注册表项WaitToKillServiceTimeout

问题

RequestAdditionalTime有什么影响?我应该在哪里看到使用它时的差异,我该如何测试呢? 有几次我读到,如果没有请求额外的时间,SCM将终止服务。但我看不出那种行为。

所有在我的本地开发机器(Win 8.1)上运行的测试,假设其行为与在Windows Server操作系统上的行为相同。

0 个答案:

没有答案