Méthode StopService de la classe Win32_Service (Sdoias.h)

La méthode de classe WMIStopService place le service, représenté par l’objet Win32_Service, dans l’état arrêté.

Cette rubrique utilise la syntaxe MOF (Managed Object Format). 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 retournée

Retourne l’une des valeurs répertoriées dans la liste suivante, ou toute autre valeur pour indiquer une erreur. Pour obtenir des codes d’erreur supplémentaires, consultez Constantes d’erreur WMI ou WbemErrorEnum. Pour connaître les valeurs 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’avait 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. State property) est égal à 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 au démarrage du service.

9

Le chemin d’accès au répertoire du fichier exécutable de 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 ce service s’appuie 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 supprimé du système.

17

Le service n’a pas de thread d’exécution.

18

Le service a des dépendances circulaires au démarrage.

19

Un service s’exécute sous le même nom.

20

Le nom du service comporte des caractères non valides.

21

Des paramètres non valides ont été passés au service.

22

Le compte sous lequel ce service s’exécute n’est pas valide ou n’a pas les 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 peut-il être suspendu ? Si ce n’est pas le cas, votre seule option est l’arrêt du service.
  • Devez-vous continuer à gérer les demandes des clients pour toute personne déjà connectée au service ? Si c’est le cas, la suspension d’un service lui permet généralement de gérer des clients existants tout en refusant l’accès à de 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 pour que les modifications prennent effet immédiatement ? Bien que les propriétés du service puissent être modifiées pendant la pause d’un service, la plupart d’entre elles ne prennent effet qu’une fois le service 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 dont les services dépendants sont 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, case activée immédiatement le Win32_Service. Propriété d’état, car la valeur peut toujours indiquer que le service est en cours d’exécution.

Exemples

Set-RemoteService Exemple PowerShell Définit l’état du service pour les machines distantes.

L’exemple VBScript Arrêter un service et ses dépendants 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, vérifiez que le service NetDDE et ses services dépendants sont en cours d’exécution à l’aide du composant logiciel enfichable MMC Services.msc ou de la commande Net Start .

La classe Win32_DependentService vous permet de localiser les dépendances de service via une requête Associators Of .

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
Racine\CIMV2
En-tête
Sdoias.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Voir aussi

Classes du système d’exploitation

Win32_Service

Tâches WMI : Services

PauseService