Freigeben über


StopService-Methode der Win32_Service-Klasse (Sdoias.h)

Die StopService-WMI-Klassenmethode versetzt den Durch das Win32_Service-Objekt dargestellten Dienst in den beendeten Zustand.

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

Syntax

uint32 StopService();

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

Nachdem Sie ermittelt haben, welche Dienste beendet oder angehalten werden können, können Sie die Methoden StopService und PauseService verwenden, um Dienste zu beenden und anzuhalten. Die Entscheidung, einen Dienst zu beenden, anstatt ihn anzuhalten oder umgekehrt, hängt von mehreren Faktoren ab, einschließlich der folgenden:

  • Kann der Dienst angehalten werden? Andernfalls ist die einzige Option das Beenden des Diensts.
  • Müssen Sie weiterhin Clientanforderungen für personen bearbeiten, die bereits mit dem Dienst verbunden sind? Wenn ja, ermöglicht das Anhalten eines Diensts in der Regel, vorhandene Clients zu verarbeiten und gleichzeitig den Zugriff auf neue Clients zu verweigern. Im Gegensatz dazu werden beim Beenden eines Diensts alle Clients sofort getrennt.
  • Müssen Sie einen Dienst neu konfigurieren und die Änderungen sofort wirksam werden? Obwohl Diensteigenschaften geändert werden können, während ein Dienst angehalten wird, werden die meisten erst wirksam, wenn der Dienst tatsächlich beendet und neu gestartet wird.

Der zum Beenden eines Diensts erforderliche Skriptcode ist fast identisch mit dem Code, der zum Anhalten des Diensts erforderlich ist.

Wenn Sie versuchen, einen Dienst zu beenden, für den abhängige Dienste ausgeführt werden, schlägt die StopService-Methode mit dem Rückgabewert 3 fehl. Die abhängigen Dienste müssen zuerst beendet werden.

Wenn Sie einen Dienst beenden, überprüfen Sie sofort die Win32_Service. State-Eigenschaft , da der Wert den Dienst weiterhin als ausgeführt anzeigen kann.

Beispiele

Set-RemoteService PowerShell-Beispiel: Legt den Dienststatus für Remotecomputer fest.

Im VBScript-Beispiel Beenden eines Diensts und seiner abhängigen Dienste wird ein Dienst und alle abhängigen Dienste beendet.

Im folgenden VBScript-Codebeispiel wird das Herunterfahren eines Diensts veranschaulicht.

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

Im folgenden Perl-Codebeispiel wird das Herunterfahren eines Diensts veranschaulicht.

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

Das folgende VBScript-Codebeispiel zeigt, dass Sie den NetDDE-Dienst erst beenden können, wenn die abhängigen Dienste beendet wurden. Stellen Sie zum Ausführen des Skripts sicher, dass der NetDDE-Dienst und seine abhängigen Dienste ausgeführt werden, indem Sie das MMC-Snap-In Services.msc oder den Net Start-Befehl verwenden.

Mit der Win32_DependentService-Klasse können Sie Dienstabhängigkeiten über eine Associators Of-Abfrage suchen.

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

Anforderungen

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

Siehe auch

Betriebssystemklassen

Win32_Service

WMI-Aufgaben: Dienste

PauseService