Win32_Service 类的 StopService 方法 (Sdoias.h)

StopServiceWMI 类方法将Win32_Service对象表示的服务置于停止状态。

本主题使用托管对象格式 (MOF) 语法。 有关使用此方法的详细信息,请参阅 调用方法

语法

uint32 StopService();

参数

此方法没有任何参数。

返回值

返回以下列表中列出的值之一,或返回指示错误的任何其他值。 有关其他错误代码,请参阅 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

该服务目前在系统中已暂停。

备注

确定可以停止或暂停哪些服务后,可以使用 StopServicePauseService 方法来停止和暂停服务。 决定停止服务而不是暂停服务,反之亦然,取决于多个因素,包括:

  • 服务是否能够暂停? 否则,唯一的选择是停止服务。
  • 是否需要继续处理已连接到该服务的任何人的客户端请求? 如果是这样,暂停服务通常允许它处理现有客户端,同时拒绝访问新客户端。 相反,停止服务时,所有客户端都会立即断开连接。
  • 是否需要重新配置服务并让更改立即生效? 尽管可以在服务暂停时更改服务属性,但大多数属性在服务实际停止并重启之前不会生效。

停止服务所需的脚本代码几乎与暂停服务所需的代码相同。

如果尝试停止运行依赖服务的服务, StopService 方法将失败,返回值 3。 必须先停止从属服务。

如果停止服务,请立即检查Win32_ServiceState 属性,因为值可能仍显示服务正在运行。

示例

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 服务。 若要运行脚本,请使用 Services.msc MMC 管理单元或 Net Start 命令确保 NetDDE 服务及其依赖服务正在运行。

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
标头
Sdoias.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

另请参阅

操作系统类

Win32_Service

WMI 任务:服务

PauseService