quel est le délai maximum d'attente du service Windows pour traiter la demande d'arrêt et comment demander un délai supplémentaire
J'ai écrit un service windows en c# que le processus de beaucoup de données. quand on l'arrête d'essayer pendant un certain temps 20/30 secondes, puis lance une exception.
Je veux mettre en œuvre ServiceBase.RequestAdditionalTime() dans OnStop événement.
Je veux savoir exactement délai d'attente après lequel windows service lève l'exception, de sorte que je peux demander du temps supplémentaire juste avant.
J'ai cherché mais ne trouve pas ce défaut, de cesser de valeur de délai d'expiration.
source d'informationauteur Imran Rizvi | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
J'ai écrit le code suivant pour l'atteindre.
Le code ci-dessus commence une Tâche en Parallèle pour le thread principal (Tâche commence à fonctionner immédiatement), la ligne suivante est de vérifier si la tâche est terminée ou pas toutes les 10 secondes et si elle n'est pas terminée il demande supplémentaire de 10 secondes et de garder le contrôle jusqu'à tâche de se rempli.
Bien qu'un certain nombre de personnes ont mentionné le
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout
clé de registre, selon ce "Service de Gestionnaire de Contrôle" article de Microsoft que l'entrée de registre seulement contrôle le montant maximum de temps de service peut prendre pour arrêter lorsque Windows lui-même est arrêté ou redémarré:Si Windows n'est pas dans le processus de redémarrage ou l'arrêtpuis le par défaut quantité de temps que Windows va attendre un service pour arrêter est de 30 secondes. Toutefois, les applications peuvent faire des demandes pour le temps additionnel, qui sera à l'honneur jusqu'à 125 secondes au total (résumé à travers toutes les demandes).
Sur Windows Server 2003 et plus tard, ce délai d'expiration par défaut peut être changé via le
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicesPipeTimeout
clé de registre, comme décrit dans cet article du support Microsoft (et cette question ServerFault). Il n'est pas clair si cela s'applique à Windows 7/8/10, que l'article ne mentionne que les versions de serveur.Si un redémarrage/arrêt a été lancé sur la machine, le WaitToKillServiceTimeout valeur de clé de registre (si présent) spécifie la quantité maximale de temps Windows permet l'application est autorisée, en remplaçant le système d'exploitation par défaut.
Sans doute est-ce donc que les applications ne peuvent pas arbitrairement arrêt différé au-delà de la valeur par défaut (ou ce que l'administrateur spécifié par l'WaitToKillServiceTimeout entrée de registre).
Qu'il est défini dans le registre de sous-clé:
avec chaîne de valeur
WaitToKillServiceTimeout
. Si pas définie, la valeur par défaut 20000 (ms). Sur ma machine, il semble être à 12000 (12s). Je n'ai jamais touché.par défaut je crois qu'il est de 12 000 millisecondes, de le changer, vous devez accéder à de registre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitToKillServiceTimeout et modifier la valeur
mais vous pouvez définir votre propre si vous souhaitez démarrer ou d'arrêter la programmation
ici, vous définissez votre propre temps pour commencer
et ici, vous définissez votre propre temps pour l'arrêt de
Juste de toujours effectuer les
RequestAdditionalTime
avec le maximum de temps que vous attendez de votre service à la nécessité pour l'arrêt. Ce n'est pas une erreur de terminer plus tôt que prévu.