Метод 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 |
Заголовок |
|
MOF |
|
DLL |
|