Partager via


Méthode StartService de la classe Win32_Service (fournisseurs WMI CIMWin32)

La méthode StartService tente de placer le service référencé dans son état de démarrage.

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 StartService();

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

Bien qu’il ne semble pas y avoir de différence pratique entre un service arrêté et un service suspendu, les deux états apparaissent différemment du SCM. Un service arrêté est un service qui n’est pas en cours d’exécution et qui doit passer par l’ensemble de la procédure de démarrage du service. Toutefois, un service suspendu est toujours en cours d’exécution, mais son fonctionnement est suspendu. Pour cette raison, un service suspendu n’a pas besoin de passer par l’ensemble de la procédure de démarrage du service, mais a besoin d’une autre procédure pour reprendre son fonctionnement.

Vous devez utiliser la méthode appropriée pour démarrer un service qui a été arrêté ou pour reprendre un service qui a été suspendu. Les méthodes Win32_ServiceStartService et ResumeService doivent être utilisées dans les situations suivantes :

  • Si un service est actuellement arrêté, vous devez utiliser la méthode StartService pour le redémarrer ; ResumeService ne peut pas démarrer un service actuellement arrêté.
  • Si un service est suspendu, vous devez utiliser ResumeService. Si vous utilisez la méthode StartService sur un service suspendu, vous recevez le message « Le service est déjà en cours d’exécution ». Toutefois, le service reste suspendu jusqu’à ce que le code de contrôle de service de reprise lui soit envoyé.

Si vous démarrez un service arrêté qui dépend d’un autre service, les deux services sont démarrés. Lorsqu’un service est démarré avec cette méthode, les services dépendants ne sont pas automatiquement démarrés. Vous devez utiliser la classe d’association Win32_DependentService et la requête Associators Of pour localiser les dépendants et les démarrer séparément.

Exemples

L’exemple PowerShell d’activation à distance de RDP active à distance le service Bureau à distance.

L’exemple PowerShell Arrêter, Démarrer, Activer ou Désactiver le service démarre, arrête, active ou désactive un service.

L’exemple de code VBSScript suivant montre comment démarrer un service spécifique à partir d’instances de Win32_Service.

Set ServiceSet = GetObject("winmgmts:").ExecQuery("select * from Win32_Service where Name='ClipSrv'")

for each Service in ServiceSet
 RetVal = Service.StartService()
 if RetVal = 0 then WScript.Echo "Service started"
 if RetVal = 10 then WScript.Echo "Service already running"
next

L’exemple de code Perl suivant montre comment démarrer un service spécifique à partir d’instances de Win32_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 $service (in $ServiceSet)
 {
  my $Result = $service->StartService();
  if ($Result == 0) 
  {
   print "\nService started\n";
  }
  elsif ($Result == 10)
  {
   print "\nService already running\n";
  }
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

L’exemple de code VBScript suivant, NetDDE, dépend du service NetDDEDSDM. Le script localise la classe dont dépend NetDDE et la démarre, ce qui ne démarre pas automatiquement NetDDE.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

' Stop NetDDE if it is running
Set objNetDDEService = objWMIService.Get("Win32_Service.Name='NetDDE'")
Return = objNetDDEService.StopService()

' NetDDE is in the dependent role to another service
Set colServiceList = objWMIService.ExecQuery("Associators of " _
    & "{Win32_Service.Name='NetDDE'} Where " & "AssocClass=Win32_DependentService " & "Role=Dependent" )

' start the service on which NetDDE is dependent
For Each objService in colServiceList
    WScript.Echo "Starting " & objService.Name
    Return = objService.StartService()
    If Return = 0 Then
        WScript.Echo "Parent service " & objService.Name & " started successfully"
    Else
        WScript.Echo "Parent service " & objService.Name & " did not start. Return = " & Return
    End If
Next

' NetDDE is still stopped
Set objNetDDEService = _
    objWMIService.Get("Win32_Service.Name='NetDDE'")
WScript.Echo "Dependent NetDDE service is " & objNetDDEService.State

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
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Voir aussi

Classes du système d’exploitation

Win32_Service

Tâches WMI : Services