J'ai créé un service Windows et dans le service dans le panneau de configuration -> Outils d'administration -> Services, son statut est en cours de démarrage.
Je souhaite arrêter ce service, mais l'option d'arrêt est grisée. Comment puis-je démarrer/arrêter le service?
Chaque fois que je redémarre, il s’arrête et je peux le supprimer.
Si vous exécutez la commande:
sc queryex <service name>
où est le nom du service, pas le nom d'affichage (spouleur, pas spouleur d'impression), à l'invite cmd, il renverra le PID du processus sous lequel le service est exécuté. Prenez ce PID et courez
taskkill /F /PID <Service PID>
pour forcer le PID à s’arrêter. Parfois, si le processus se bloque lors de l'arrêt de l'interface graphique, vous ne pouvez rien faire avec le service.
Vous pouvez le faire en une seule ligne (utile pour les environnements ci-dessus):
taskkill /fi "Services eq SERVICE_NAME" /F
Filtre -> Services -> ServiceName est égal à SERVICE_NAMES -> Force
Source: https://technet.Microsoft.com/en-us/library/bb491009.aspx
Utilisez le gestionnaire de tâches pour trouver le service et le tuer à partir de là en utilisant Tâche finale. Fait toujours le tour pour moi.
Si vous avez créé le service vous-même, envisagez de supprimer les opérations à exécution longue de l'événement OnStart. C'est généralement ce qui rend le service non réactif.
Si l'option d'arrêt est grisée, votre service n'a pas indiqué qu'il acceptait SERVICE_ACCEPT_STOP
quand il a appelé pour la dernière fois SetServiceStatus
. Si vous utilisez .NET, vous devez définir la propriété CanStop
dans ServiceBase
.
Bien sûr, si vous acceptez les demandes d'arrêt, vous feriez mieux de vous assurer que votre service peut traiter ces demandes en toute sécurité, surtout si votre service continue de progresser grâce à son code de démarrage.
Comme Aaron l’a mentionné plus haut, certains services n’acceptent pas SERVICE_ACCEPT_STOP
messages, au moment où il a été développé. Et c'est codé en dur dans l'exécutable. Période. Un workaroud serait de ne pas le démarrer, et comme vous ne pouvez pas modifier ses propriétés, effectuez de force les opérations suivantes:
Si vous ne pouvez pas modifier l'entrée, cliquez avec le bouton droit de la souris sur le nom de votre service dans le volet de gauche, sélectionnez "Autorisations", vérifiez que "Tout le monde" dispose d'un accès complet, puis relancez l'étape 4.
N'oubliez pas de désactiver à nouveau le démarrage sécurisé à partir de msconfig et de redémarrer!
Ouvrez la commande Invite avec un accès administrateur et tapez les commandes suivantes.
une)
tasklist
il affiche la liste de tous les services disponibles. Là, vous pouvez voir le service que vous voulez arrêter/démarrer/redémarrer. Rappelez-vous la valeur PID du service que vous voulez forcer à arrêter.
b) Maintenant, tapez
taskkill /f /PID [PID value of the service]
et appuyez sur Entrée. En cas de succès, vous obtiendrez le message "SUCCESS: le processus avec PID est terminé".
Ex : taskkill /f /PID 5088
Cela va tuer de force le service gelé. Vous pouvez maintenant revenir au gestionnaire de serveur et redémarrer le service.