Question

J'utilise un fichier batch pour arrêter un service Windows. J'utilise la commande sc, mais je suis ouvert à d'autres idées, compte tenu de la question ci-dessous. Le problème est que le produit de fichier batch en le service est d'arrêt (l'argument stop à sc semble que demande l'arrêt - il ne fonctionne pas attente pour l'arrêt).

Comment puis-je modifier le fichier batch ne pas procéder jusqu'à ce que l'arrêt est complet

Était-ce utile?

La solution

L'utilisation peut utiliser NET stop, qui est synchrone, i.e. il attendra jusqu'à l'arrêt de service.

Voir  - net stop

Autres conseils

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

Comme mentionné ci-dessus, NET STOP envoie une commande d'arrêt au service, mais, si le service prend plus d'un certain temps (20 secondes ou si mon observation), NET STOP n'attendra pas le service fait escale avant de revenir.

Pour faire une pause en fait le fichier de commandes jusqu'à l'arrêt de service, vous devez utiliser une approche comme ceux décrits dans ces discussions:

Comment vérifier si un service est en cours d'exécution via un fichier batch et démarrer, si elle ne fonctionne pas?

Arrêt / Démarrage un service et en attente de Windows à distance pour pour ouvrir / fermer

Je crois net stop [Service] devrait attendre jusqu'à ce que le service est complètement arrêté avant de passer. sc stop [Service] envoie simplement un message "stop" au service.

Ceci est un peu grossier, mais il a travaillé pour moi afin de faire en sorte que je puisse planifier un fichier de commandes par jour pour un service essentiellement REDÉMARRER.

NET STOP [service]

: TryAgain

TIMEOUT / T 10 / NOBREAK

NET START [service]

IF% ERRORLEVEL% NEQ 0 GOTO TryAgain

Je me rends compte avec cet extrait de code que cela pourrait entraîner une boucle sans fin si le service était de ne pas démarrer avec succès. Je voulais juste montrer essentiellement comment contourner le problème en utilisant TIMEOUT où un service peut prendre plus de temps d'arrêt que ce que la commande NET STOP permet.

Utilisez le symbole && entre les commandes. Le symbole attend de && pour terminer la commande précédente avant de procéder à la commande suivante.

Toutes les commandes doivent être à la même ligne de commande. Vous pouvez utiliser autant de commandes que vous voulez dans une rangée.

Vous pouvez également utiliser la commande pause. Avec cela, demande d'appuyer sur une touche, avant de procéder à la procédure suivante.

Par exemple:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top