2016-08-15 1 views
1

J'ai installé de nombreux services Windows en utilisant Top-Shelf. Je me demandais s'il existe un moyen de définir un délai d'expiration lors de l'arrêt du service pour activer le processus en cours que le service est en train de gérer pour terminer avant la fermeture du service? Je veux attendre X secondes avant de terminer le Top-Shelf.Comment ajouter le délai d'attente avant d'arrêter le service Windows hébergé par topshelf

Ceci est ma console que j'ai installé en tant que service:

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

Merci!

Répondre

0

Dans votre mise en œuvre de service, utilisez le HostControl à demande temps d'arrêt supplémentaire (je présume votre service implémente déjà ServiceControl comme c'est ce que .Service<T> attend) - noter que le Service Control Manager peut ou ne peut pas accorder la demande:

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

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

similaire au délai d'attente de démarrage

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