Win32_Service 类的 delete 方法 (CIMWin32 WMI 提供程序)
DeleteWMI 类方法删除现有服务。
本主题使用托管对象格式 (MOF) 语法。 有关使用此方法的详细信息,请参阅 调用方法。
语法
uint32 Delete();
参数
此方法没有任何参数。
返回值
返回以下列表中列出的值之一或指示错误的任何其他值。 有关其他错误代码,请参阅 WMI 错误常量 或 WbemErrorEnum。 有关常规 HRESULT 值,请参阅 系统错误代码。
-
0
-
已接受该请求。
-
1
-
不支持该请求。
-
2
-
用户没有必要的访问权限。
-
3
-
由于其他正在运行的服务依赖于该服务,不能停止该服务。
-
4
-
请求的控制代码无效或服务无法接受该控制代码。
-
5
-
无法将请求的控制代码发送到服务,因为服务的状态 (Win32_BaseService。状态 属性) 等于 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 删除操作系统服务。
准备删除服务时,请记住以下信息:
必须先停止服务,然后才能将其删除。 如果在发出 delete 命令时服务正在运行,则会将服务标记为要删除,但它会继续运行,直到它停止并关闭所有打开的句柄。
如果服务从未停止,则永远不会删除该服务。
删除服务不会删除该服务的可执行文件。
使用 WMI 删除服务会删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下的相关注册表项。 因此,不再安装该服务,并且无法通过服务管理单元使用。 但是,WMI 不会删除可执行文件,这意味着可以轻松重新安装该服务。 若要删除可执行文件,必须检索路径名称,然后删除该文件。
删除基本 Windows 2000 服务 (例如,使用 WMI) DHCP 会删除该服务的注册表项,但不会从“管理工具”菜单中删除快捷方式,也不会从 Windows 组件向导中删除该服务。 这会使任何尝试确定计算机配置方式的人感到困惑。
例如,如果使用 WMI 脚本删除 DHCP 服务,则 DHCP 服务不再在“服务”管理单元中列出。 但是,DHCP 控制台的无法正常工作的快捷方式仍保留在“管理工具”菜单中,如果启动 Windows 组件向导,则表明 DHCP 服务已安装。
因此,应始终使用 Sysocmgr.exe 以编程方式删除 Windows 2000 服务。
示例
以下 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 |
|