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


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

Метод класса DeleteWMI удаляет существующую службу.

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

Синтаксис

uint32 Delete();

Параметры

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

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

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

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

Комментарии

По мере изменения организации вы можете удалить определенные службы с определенных компьютеров. Внутренние и сторонние службы можно удалить с помощью инструментария WMI, а службы операционной системы — с помощью Sysocmgr.exe.

При подготовке к удалению служб учитывайте следующие сведения:

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

    Если служба никогда не останавливается, она никогда не будет удалена.

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

    При удалении службы с помощью инструментария WMI удаляются связанные записи реестра в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. В результате служба больше не установлена и недоступна через оснастку "Службы". Однако инструментарий WMI не удаляет исполняемый файл, то есть можно легко переустановить службу. Чтобы удалить исполняемый файл, необходимо получить имя пути, а затем удалить файл.

  • При удалении базовой службы Windows 2000 (например, DHCP) с помощью инструментария WMI удаляются записи реестра для этой службы, но не удаляется ярлык из меню Администрирование или служба из мастера компонентов Windows. Это может сбить с толку любого, кто пытается определить, как был настроен компьютер.

    Например, если удалить службу DHCP с помощью скрипта WMI, служба DHCP больше не будет указана в оснастке служб. Однако нефункционационный ярлык для консоли DHCP остается в меню Администрирование. Если запустить мастер компонентов Windows, это означает, что служба DHCP установлена.

    Поэтому для программного удаления служб Windows 2000 следует использовать Sysocmgr.exe.

Примеры

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

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Service WHERE Name = 'DbService'")
For Each objService in colListOfServices
 objService.StopService()
 objService.Delete()
Next

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

use strict;
use Win32::OLE;

my ($Service, $ServiceSet) ;
eval {$ServiceSet = Win32::OLE->GetObject("winmgmts:{impersonationLevel=impersonate}")->
 ExecQuery("SELECT * FROM Win32_Service WHERE Name='MyService'");};
unless($@)
{
 foreach $Service (in $ServiceSet)
 {
  my $RetVal = $Service->Delete();
  if ($RetVal == 0)  
  {
   print "Service deleted \n"; 
  }
  else  
  {
   print "Delete failed: %d", $RetVal;
  }
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

Требования

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

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

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

Win32_Service

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