2010-01-05 1 views
5

Je rencontre un problème que je ne peux pas résoudre concernant un service Windows que j'ai écrit en C#. Ce que j'essaye de faire est d'attendre une période spécifique pour qu'un processus d'enfant se termine avant que je suis forcé de le tuer et arrêter le service. J'ai défini mon délai d'attente de 5 à 15 secondes et mon service attend la durée appropriée, puis tue l'enfant et s'arrête lorsque je l'arrête via la fenêtre de service mmc. Cependant, si j'éteins l'ordinateur, mon service est ébloui avant qu'il ne puisse attendre et s'arrêter correctement. J'ai lu que Windows permet un délai d'attente de 30 secondes pour qu'un service s'arrête avant qu'il ne l'emporte. Mon code s'exécute en moins de 30 secondes, le maximum est d'environ 20 secondes, selon ce que je définis pour le délai.Obliger les fenêtres à attendre l'arrêt d'un service lors de la fermeture

J'ai essayé d'utiliser la fonction SetServiceStatus() dans l'API win32 mais cela n'a pas changé la fonction du code. J'ai vérifié que l'appel de fonction réussit. Existe-t-il un autre moyen de forcer Windows à attendre que mon service se ferme correctement? Je le teste dans Windows 7 x86, et Windows Vista Sp1 x86. OnStart et OnSTop sont hérités d'une classe de base qui fait un peu pour vous.

Répondre

2

Windows sera pas laisser un service d'empêcher l'arrêt, ce qui est by-design. Comme le dit Gyuri, vous devez considérer un design différent pour votre application.

+0

+1: * De toute évidence, la solution consiste à réduire le temps d'arrêt du service. Soooo nombreuses applications ignorent l'importance de cela et. –

0

Toutes vos implémentations de ces méthodes devraient faire est de démarrer ou d'arrêter votre code client, Windows fera le reste. Je vais mettre en garde sur le fait que j'utilise C# et l'implémentation de ServiceBase de .Net le fait, je ne peux pas parler avec autorité du code ou des API C/C++.

1

Il s'agit d'un paramètre Windows global, apparemment: http://support.microsoft.com/kb/305788. Je serais inquiet si je devais compter sur les utilisateurs pour laisser mon service fermé. Je voudrais enregistrer mes données périodiquement à la place.

+0

Cela craint. J'ai un service Windows hébergeant des machines virtuelles qui prennent du temps pour s'arrêter. Je ne veux pas qu'il attende indéfiniment, mais un délai d'attente plus long (un peu plus d'une minute) ferait en sorte que mes machines soient correctement fermées. – Jens

Questions connexes