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 format MOF (MOF). 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 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.

Remarques

Bien qu’il puisse sembler qu’il n’y ait aucune différence pratique entre un service arrêté et un service suspendu, les deux États apparaissent différemment pour le SCM. Un service arrêté est un service qui n’est pas en cours d’exécution et doit suivre l’intégralité 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 traverser l’intégralité de la procédure de démarrage du service, mais il a besoin d’une procédure différente 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 de _ service Win32 StartService et ResumeService doivent être utilisées dans les cas suivants :

  • 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 qui est 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 en pause jusqu’à ce que le code de contrôle de reprise du service 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, tous les services dépendants ne sont pas démarrés automatiquement. Vous devez utiliser la classe d’association Win32 _ DependentService et les associateurs de la requête pour localiser les dépendants et les démarrer séparément.

Exemples

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

L’exemple PowerShell Stop, Start, Enable ou Disable 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 du _ service Win32.

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 du _ service Win32.

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 le 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

Configuration requise

Condition requise Valeur
Client minimal pris en charge
Windows Vista
Serveur minimal pris en charge
Windows Server 2008
Espace de noms
\Cimv2 racine
MOF
CIMWin32. mof
DLL
CIMWin32.dll

Voir aussi

Classes du système d’exploitation

_Service Win32

Tâches WMI : services