Метод 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 |
|
DLL |
|