2016-08-15 63 views
1

我有很多使用Top-Shelf安裝的Windows服務。如何在停止Windows服務之前添加超時功能

我想知道在停止服務時是否有設置超時的方法,以啓用服務當前正在處理的進程,以便在服務實際關閉之前完成? 我想在終止Top-Shelf之前等待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>預期) - 注意,服務控制管理器可能會或可能不會向要求:

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));