2016-08-15 7 views
1

У меня есть много служб Windows, которые я установил с помощью Top-Shelf.Как добавить тайм-аут перед тем, как остановить службу Windows, которая размещена topshelf

Я задавался вопросом, существует ли способ установить тайм-аут при остановке службы для включения текущего процесса, который служба обрабатывает в настоящий момент, до того, как служба действительно закрывается? Я хочу подождать X секунд до того, как закончу верхний полк.

Это моя консоль, которую я установил в качестве службы:

static int Main(string[] args) 
    { 
     return (int)HostFactory.Run(x => 
     { 
      string serviceName = new ServiceNameResolverImpl().GetServiceName(); 
      x.SetServiceName(serviceName); 
      x.SetDisplayName(serviceName); 
      x.SetDescription(serviceName); 

      x.UseAssemblyInfoForServiceInfo(); 
      x.RunAsLocalSystem(); 
      x.StartAutomaticallyDelayed(); 
      x.SetStartTimeout(TimeSpan.FromMinutes(1)); 
      x.Service<ServiceImpl>(); 
     }); 
    } 

Спасибо!

ответ

0

В вашей реализации услуг, использовать HostControl для запроса дополнительного времени выключения (я предполагаю, ваша служба уже реализует ServiceControl, как это то, что .Service<T> ожидает) - обратите внимание, что Control Manager Service может или не может удовлетворить запрос:

public class ServiceImpl : ServiceControl 
{ 
    public bool Start(HostControl hostControl) 
    { 
      return true; 
    } 

    public bool Stop(HostControl hostControl) 
    { 
      hostControl.RequestAdditionalTime(TimeSpan.FromMinutes(1)); 
      return true; 
    } 
} 
0

похож на тайм-аут запуска

x.SetStopTimeout(TimeSpan.FromMinutes(1));