Comment arrêter le service Windows par programme
Sur la programmation des services Windows: comment arrêter mon service windows?
Voici un exemple simplifié de code(C#):
//Here is my service class (MyTestService.cs).
public class MyTestService:ServiceBase{
//Constructor.
public MyTestService(){
this.ServiceName = "My Test Service";
return;
}
};
// My application class (ApplicationClass.cs).
public static class ApplicationClass{
//Here is main Main() method.
public static void Main(){
//1. Creating a service instance
//and running it using ServiceBase.
MyTestService service = new MyTestService();
ServiceBase.Run(service);
//2. Performing a test shutdown of a service.
service.Stop();
Environment.Exit(0);
return;
};
};
Donc: j'ai créé "Mon Test de Service" a commencé et s'est arrêté. Mais quand je suis à la recherche dans mes Services.msc - "Mon Test de Service" est continue de courir et ne s'arrête que lorsque je clique sur "Arrêter". Pourquoi? - pourquoi service.Stop() commande ne fait rien?
ServiceController.Stop() ne fait rien!
Comment puis-je arrêter mon service de méthode main ()?
source d'informationauteur roman_lenko | 2013-05-01
Vous devez vous connecter pour publier un commentaire.
La
Stop
-fonction envoie un arrêt du signal. Il n'est pas d'attendre que le signal est reçu et traité.Vous devrez attendre jusqu'à l'Arrêt du signal a terminé son travail. Vous pouvez le faire en appelant
WaitForStatus
:Voir pour plus d'info: http://msdn.microsoft.com/nl-nl/library/system.serviceprocess.servicecontroller.waitforstatus(v=vs. 71).aspx
Environment.Exit
est un méchant. NE L'UTILISEZ PAS! Il abandonne votre demande à la dure, sans effectuer tout nettoyage en enfin blocs, sans appeler de finaliseur par le GC, il met fin à toutes les autres forground threads, etc. J'imagine que votre demande est annulée avant l'arrêt du signal, même à gauche de votre application.Je suis en utilisant des fonctions suivantes dans mon projet
Dans votre exemple de code
service.Stop()
etServiceController.Stop()
commandes ne fait rien parce qu'ils ne sont pas appelés alors que le service est en cours d'exécution depuisServiceBase.Run(service)
est l'opération de blocage et elle renvoie uniquement à l'arrêt du service.