Поделиться через


Метод StopService класса Win32_Service (Sdoias.h)

Метод класса StopService WMI помещает службу, представленную объектом Win32_Service, в остановленном состоянии.

В этом разделе используется синтаксис формата управляемого объекта (MOF). Дополнительные сведения об использовании этого метода см. в разделе Вызов метода.

Синтаксис

uint32 StopService();

Параметры

Этот метод не имеет параметров.

Возвращаемое значение

Возвращает одно из значений, перечисленных в следующем списке, или любое другое значение, указывающее на ошибку. Дополнительные коды ошибок см. в разделе WMI Error Constants или WbemErrorEnum. Общие значения HRESULT см. в разделе Системные коды ошибок.

0

Запрос принят.

1

Запрос не поддерживается.

2

У пользователя не было необходимого доступа.

3

Службу нельзя остановить, так как от нее зависят другие работающие службы.

4

Запрошенный управляющий код недопустим или неприемлем для данной службы.

5

Не удается отправить запрошенный управляющий код в службу, так как состояние службы (Win32_BaseService. Свойство State ) равно 0, 1 или 2.

6

Служба не запущена.

7

Служба не ответила на запрос запуска за отведенное время.

8

Неизвестный сбой при запуске службы.

9

Путь каталога к исполняемому файлу службы не найден.

10

Служба уже запущена.

11

База данных для добавления новой службы заблокирована.

12

Зависимость, на основе которого зависит эта служба, была удалена из системы.

13

Этой службе не удалось найти службу, которая необходима зависимой службе.

14

Эта служба была отключена в системе.

15

Эта служба не поддерживает проверку подлинности, необходимую для работы в системе.

16

Эта служба удаляется из системы.

17

Служба не имеет потока выполнения.

18

Служба имеет циклические зависимости при запуске.

19

Служба выполняется с тем же именем.

20

Имя службы содержит недопустимые символы.

21

Службе переданы недопустимые параметры.

22

Учетная запись, под которой выполняется эта служба, является недопустимой или не имеет разрешений для запуска службы.

23

Служба существует в базе данных доступных в системе служб.

24

Служба в данный момент приостановлена в системе.

Комментарии

Определив, какие службы можно остановить или приостановить, можно использовать методы StopService и PauseService для остановки и приостановки служб. Решение о том, чтобы остановить службу, а не приостановить ее, или наоборот, зависит от нескольких факторов, в том числе следующих:

  • Может ли служба быть приостановлена? В противном случае единственным вариантом является остановка службы.
  • Нужно ли продолжать обработку клиентских запросов для всех пользователей, уже подключенных к службе? Если это так, то приостановка службы обычно позволяет ей обрабатывать существующие клиенты, запрещая доступ к новым клиентам. Напротив, при остановке службы все клиенты немедленно отключаются.
  • Нужно ли перенастроить службу и немедленно вступить в силу изменения? Хотя свойства службы можно изменить во время приостановки службы, большинство из них не вступают в силу, пока служба не будет остановлена и не перезапущена.

Код скрипта, необходимый для остановки службы, почти идентичен коду, необходимому для приостановки службы.

При попытке остановить службу с зависимыми службами, метод StopService завершается ошибкой с возвращаемым значением 3. Сначала необходимо остановить зависимые службы.

При остановке службы немедленно проверка Win32_Service. Свойство State, так как значение может по-прежнему отображать службу как запущенную.

Примеры

Set-RemoteService Пример PowerShell Задает состояние службы для удаленных компьютеров.

Пример VBScript остановки службы и ее зависимых служб останавливает службу и все зависимые службы.

В следующем примере кода VBScript показано, как завершить работу службы.

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

В следующем примере кода Perl показано, как завершить работу службы.

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

В следующем примере кода VBScript показано, что невозможно остановить службу NetDDE, пока не будут остановлены зависимые службы. Чтобы запустить скрипт, убедитесь, что служба NetDDE и ее зависимые службы запущены с помощью оснастки MMC Services.msc или команды Net Start .

Класс Win32_DependentService позволяет находить зависимости службы с помощью запроса 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

Требования

Требование Значение
Минимальная версия клиента
Windows Vista
Минимальная версия сервера
Windows Server 2008
Пространство имен
Root\CIMV2
Заголовок
Sdoias.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

См. также раздел

Классы операционной системы

Win32_Service

Задачи WMI: службы

PauseService