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


Метод StartService класса Win32_Service (поставщики WMI CIMWin32)

Метод StartService пытается поместить указанную службу в состояние запуска.

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

Синтаксис

uint32 StartService();

Параметры

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

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

Возвращает одно из значений, перечисленных в следующем списке, или любое другое значение, указывающее на ошибку. Дополнительные коды ошибок см. в разделе 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

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

Комментарии

Хотя может показаться, что нет никакой практической разницы между остановленной и приостановленной службой, эти два состояния выглядят по-разному для SCM. Остановленная служба — это служба, которая не запущена и должна пройти всю процедуру запуска службы. Однако приостановленная служба по-прежнему работает, но ее функционирование приостановлено. Из-за этого приостановленной службе не нужно проходить всю процедуру запуска службы, но для возобновления работы требуется другая процедура.

Для запуска остановленной службы или возобновления приостановленной службы необходимо использовать соответствующий метод. Методы Win32_ServiceStartService и ResumeService следует использовать в следующих ситуациях:

  • Если служба в настоящее время остановлена, ее необходимо перезапустить с помощью метода StartService . ResumeService не может запустить службу, которая в настоящее время остановлена.
  • Если служба приостановлена, необходимо использовать ResumeService. Если вы используете метод StartService в приостановленной службе, вы получите сообщение "Служба уже запущена". Однако служба остается приостановленной до тех пор, пока ей не будет отправлен код управления возобновлением работы службы.

Если запустить остановленную службу, которая зависит от другой службы, будут запущены обе службы. При запуске службы с помощью этого метода все зависимые службы не запускаются автоматически. Необходимо использовать класс ассоциации Win32_DependentService и запрос Associators Of , чтобы найти зависимые элементы и запустить их отдельно.

Примеры

Пример удаленного включения RDP PowerShell позволяет удаленно включить службу удаленного рабочего стола.

В примере PowerShell для запуска, запуска, включения или отключения службы запускается, останавливается, включается или отключается служба.

В следующем примере кода VBSScript показано, как запустить определенную службу из экземпляров Win32_Service.

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

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

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

Следующий пример кода VBScript, NetDDE, зависит от службы NetDDEDSDM. Скрипт находит класс, от которого зависит NetDDE, и запускает его, который не запускает 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

Требования

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

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

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

Win32_Service

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