StartService-Methode der Win32_Service-Klasse (CIMWin32 WMI-Anbieter)

Die StartService-Methode versucht, den Dienst, auf den verwiesen wird, in den Startzustand zu versetzen.

In diesem Thema wird MOF-Syntax (Managed Object Format) verwendet. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Aufrufen einer Methode.

Syntax

uint32 StartService();

Parameter

Diese Methode hat keine Parameter.

Rückgabewert

Gibt einen der in der folgenden Liste aufgeführten Werte oder einen anderen Wert zurück, um einen Fehler anzugeben. Weitere Fehlercodes finden Sie unter WMI-Fehlerkonstanten oder WbemErrorEnum. Allgemeine HRESULT-Werte finden Sie unter Systemfehlercodes.

0

Die Anforderung wurde akzeptiert.

1

Die Anforderung wird nicht unterstützt.

2

Der Benutzer hatte nicht den erforderlichen Zugriff.

3

Der Dienst kann nicht beendet werden, da andere ausgeführte Dienste davon abhängig sind.

4

Der angeforderte Steuerungscode ist nicht gültig, oder es ist für den Dienst nicht akzeptabel.

5

Der angeforderte Steuerungscode kann nicht an den Dienst gesendet werden, da der Status des Diensts (Win32_BaseService. State-Eigenschaft ) ist gleich 0, 1 oder 2.

6

Der Dienst wurde nicht gestartet.

7

Der Dienst hat auf die Startanforderung nicht rechtzeitig reagiert.

8

Unbekannter Fehler beim Starten des Diensts.

9

Der Verzeichnispfad zur ausführbaren Datei des Diensts wurde nicht gefunden.

10

Der Dienst wird schon ausgeführt.

11

Die Datenbank zum Hinzufügen eines neuen Diensts ist gesperrt.

12

Eine Abhängigkeit, auf der sich dieser Dienst stützt, wurde aus dem System entfernt.

13

Der Dienst hat den Dienst nicht gefunden, der von einem abhängigen Dienst benötigt wird.

14

Der Dienst wurde vom System deaktiviert.

15

Der Dienst hat nicht die richtige Authentifizierung, um im System ausgeführt zu werden.

16

Dieser Dienst wird aus dem System entfernt.

17

Der Dienst verfügt über keinen Ausführungsthread.

18

Der Dienst verfügt beim Starten über zirkuläre Abhängigkeiten.

19

Ein Dienst wird unter demselben Namen ausgeführt.

20

Der Dienstname weist ungültige Zeichen auf.

21

Ungültige Parameter wurden an den Dienst übergeben.

22

Das Konto, unter dem dieser Dienst ausgeführt wird, ist entweder ungültig oder es fehlen die Berechtigungen zum Ausführen des Diensts.

23

Der Dienst ist in der Datenbank der im System verfügbaren Dienste vorhanden.

24

Der Dienst ist im System derzeitig angehalten.

Bemerkungen

Obwohl es keinen praktischen Unterschied zwischen einem beendeten Dienst und einem angehaltenen Dienst zu geben scheint, sind die beiden Zustände im Vergleich zum SCM unterschiedlich. Ein beendeter Dienst ist ein Dienst, der nicht ausgeführt wird und die gesamte Dienststartprozedur durchlaufen muss. Ein angehaltener Dienst wird jedoch weiterhin ausgeführt, aber seine Funktion wurde angehalten. Aus diesem Zweck muss ein angehaltener Dienst nicht die gesamte Startprozedur des Diensts durchlaufen, sondern benötigt eine andere Prozedur, um die Funktion fortzusetzen.

Sie müssen die richtige Methode verwenden, um einen angehaltenen Dienst zu starten oder einen angehaltenen Dienst fortzusetzen. Die Win32_Service Methoden StartService und ResumeService sollten in den folgenden Situationen verwendet werden:

  • Wenn ein Dienst derzeit beendet ist, müssen Sie die StartService-Methode verwenden, um ihn neu zu starten. ResumeService kann keinen Dienst starten, der derzeit beendet ist.
  • Wenn ein Dienst angehalten wird, müssen Sie ResumeService verwenden. Wenn Sie die StartService-Methode für einen angehaltenen Dienst verwenden, erhalten Sie die Meldung "Der Dienst wird bereits ausgeführt". Der Dienst bleibt jedoch angehalten, bis der Code für die Dienststeuerung fortgesetzt wird.

Wenn Sie einen beendeten Dienst starten, der von einem anderen Dienst abhängig ist, werden beide Dienste gestartet. Wenn ein Dienst mit dieser Methode gestartet wird, werden abhängige Dienste nicht automatisch gestartet. Sie müssen die Zuordnungsklasse Win32_DependentService und die Associators Of-Abfrage verwenden, um die abhängigen Elemente zu suchen und separat zu starten.

Beispiele

Im PowerShell-Beispiel remote aktivieren von RDP wird der Remotedesktopdienst aktiviert.

Mit dem PowerShell-Beispiel Beenden, Starten, Aktivieren oder Deaktivieren des Diensts wird ein Dienst gestartet, beendet, aktiviert oder deaktiviert.

Im folgenden VBSScript-Codebeispiel wird veranschaulicht, wie ein bestimmter Dienst von Instanzen von Win32_Service gestartet wird.

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

Im folgenden Perl-Codebeispiel wird veranschaulicht, wie Sie einen bestimmten Dienst aus Instanzen von Win32_Service starten.

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";
}

Das folgende VBScript-Codebeispiel, NetDDE, ist vom NetDDEDSDM-Dienst abhängig. Das Skript sucht die Klasse, von der NetDDE abhängt, und startet sie, wodurch NetDDE nicht automatisch gestartet wird.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
WindowsServer 2008
Namespace
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Siehe auch

Betriebssystemklassen

Win32_Service

WMI-Aufgaben: Dienste