Méthode StopService de la classe Win32_Service (Sdoias. h)
La méthode de classe WMI StopService place le service, représenté par l’objet de _ service Win32 , à l’état arrêté.
Cette rubrique utilise la syntaxe format MOF (MOF). Pour plus d’informations sur l’utilisation de cette méthode, consultez appel d’une méthode.
Syntaxe
uint32 StopService();
Paramètres
Cette méthode n’a aucun paramètre.
Valeur de retour
Retourne l’une des valeurs répertoriées dans la liste suivante, ou toute autre valeur pour indiquer une erreur. Pour obtenir d’autres codes d’erreur, consultez constantes d’erreur WMI ou WbemErrorEnum. Pour obtenir les valeurs de HRESULT générales, consultez codes d’erreur système.
-
0
-
La demande a été acceptée.
-
1
-
La demande n'est pas prise en charge.
-
2
-
L’utilisateur n’a pas l’accès nécessaire.
-
3
-
Le service ne peut pas être arrêté car d'autres services en cours d'exécution en dépendent.
-
4
-
Le code de contrôle demandé n'est pas valide ou est inacceptable pour le service.
-
5
-
Le code de contrôle demandé ne peut pas être envoyé au service car l’état du service (Win32 _ BaseService.**** La propriété State) est égale à 0, 1 ou 2.
-
6
-
Le service n'a pas été démarré.
-
7
-
Le service n'a pas répondu à la demande de démarrage en temps voulu.
-
8
-
Échec inconnu lors du démarrage du service.
-
9
-
Le chemin d’accès au répertoire du fichier exécutable du service est introuvable.
-
10
-
Le service est déjà en cours d'exécution.
-
11
-
La base de données pour ajouter un nouveau service est verrouillée.
-
12
-
Une dépendance sur laquelle repose ce service a été supprimée du système.
-
13
-
Le service n'a pas pu trouver le service nécessaire à partir d'un service dépendant.
-
14
-
Le service a été désactivé du système.
-
15
-
Le service ne dispose pas de l'authentification correcte pour être exécuté sur le système.
-
16
-
Ce service est en cours de suppression du système.
-
17
-
Le service n’a pas de thread d’exécution.
-
19
-
Le service a des dépendances circulaires lorsqu’il démarre.
-
19
-
Un service est en cours d’exécution sous le même nom.
-
20
-
Le nom du service contient des caractères non valides.
-
21
-
Des paramètres non valides ont été transmis au service.
-
22
-
Le compte sous lequel ce service s’exécute n’est pas valide ou ne dispose pas des autorisations nécessaires pour exécuter le service.
-
23
-
Le service existe dans la base de données des services disponibles dans le système.
-
24
-
Le service est actuellement mis en pause dans le système.
Notes
Une fois que vous avez déterminé quels services peuvent être arrêtés ou suspendus, vous pouvez utiliser les méthodes StopService et PauseService pour arrêter et suspendre les services. La décision d’arrêter un service plutôt que de le suspendre, ou vice versa, dépend de plusieurs facteurs, notamment les suivants :
- Le service est-il susceptible d’être suspendu ? Si ce n’est pas le cas, la seule option consiste à arrêter le service.
- Avez-vous besoin de continuer à gérer les demandes des clients pour quiconque déjà connecté au service ? Dans ce cas, la suspension d’un service lui permet généralement de gérer les clients existants tout en refusant l’accès aux nouveaux clients. En revanche, lorsque vous arrêtez un service, tous les clients sont immédiatement déconnectés.
- Avez-vous besoin de reconfigurer un service et de faire en sorte que les modifications prennent effet immédiatement ? Bien que les propriétés de service puissent être modifiées pendant l’interruption d’un service, la plupart d’entre elles ne prennent pas effet tant que le service n’est pas arrêté et redémarré.
Le code de script requis pour arrêter un service est presque identique au code requis pour suspendre le service.
Si vous tentez d’arrêter un service qui a des services dépendants en cours d’exécution, la méthode StopService échoue avec une valeur de retour de 3. Les services dépendants doivent d’abord être arrêtés.
Si vous arrêtez un service, vérifiez immédiatement le _ service Win32.Propriété State , car la valeur peut toujours afficher le service comme étant en cours d’exécution.
Exemples
L’ensemble de RemoteService L’exemple PowerShell définit l’état du service pour les ordinateurs distants.
L’exemple d’arrêt d’un service et de ses dépendants VBScript arrête un service et tous les services dépendants.
L’exemple de code VBScript suivant montre comment arrêter un service.
Set ServiceSet = GetObject("winmgmts:").ExecQuery("select * from Win32_Service where Name='ClipSrv'")
for each Service in ServiceSet
RetVal = Service.StopService()
if RetVal = 0 then
WScript.Echo "Service stopped"
elseif RetVal = 5 then
WScript.Echo "Service already stopped"
end if
next
L’exemple de code perl suivant montre comment arrêter un service.
use strict;
use Win32::OLE;
my $ServiceSet;
eval { $ServiceSet =
Win32::OLE->GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")->
ExecQuery("SELECT * FROM Win32_Service WHERE Name='ClipSrv'"); };
if (!$@ && defined $ServiceSet)
{
foreach my $ServiceInst (in $ServiceSet)
{
my $Result = $ServiceInst->StopService();
if ($Result == 0)
{
print "\nService stopped\n";
}
elsif ($Result == 5)
{
print "\nService already stopped\n";
}
}
}
else
{
print STDERR Win32::OLE->LastError, "\n";
}
L’exemple de code VBScript suivant montre que vous ne pouvez pas arrêter le service NetDDE tant que les services dépendants n’ont pas été arrêtés. Pour exécuter le script, assurez-vous que le service NetDDE et ses services dépendants sont en cours d’exécution en utilisant le composant logiciel enfichable MMC Services. msc ou la commande net start .
La classe _ DependentService Win32 vous permet de localiser des dépendances de service via un associateur de requête.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set objNetDDEservice = _
objWMIService.Get("Win32_Service.Name='NetDDE'")
WScript.Echo "NetDDE service state: " & objNetDDEService.State
WScript.Echo "Stopping NetDDE service"
Return = objNetDDEService.StopService()
WScript.Echo "Return value: " & Return & _
" Service cannot be stopped because " & _
"dependent services are running"
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='NetDDE'} Where " _
& "AssocClass=Win32_DependentService " & _
"Role=Antecedent" )
For Each objService in colServiceList
WScript.Echo "Dependent service: " & objService.Name & _
" State: " & objService.State
WScript.Echo "Stopping dependent service " & objService.Name
objService.StopService()
Next
Wscript.Sleep 20000
WScript.Echo "Stopping NetDDE service"
Return = objNetDDEService.StopService()
WScript.Echo "Return value: " & Return
Spécifications
| Condition requise | Valeur |
|---|---|
| Client minimal pris en charge |
Windows Vista |
| Serveur minimal pris en charge |
Windows Server 2008 |
| Espace de noms |
\Cimv2 racine |
| En-tête |
|
| MOF |
|
| DLL |
|