Win32_Service 类的 StartService 方法 (CIMWin32 WMI 提供程序)

StartService 方法尝试将引用的服务置于其启动状态。

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

语法

uint32 StartService();

参数

此方法没有任何参数。

返回值

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

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

备注

尽管停止的服务与暂停的服务之间似乎没有实际差异,但这两种状态与 SCM 不同。 已停止的服务是未运行且必须完成整个服务启动过程的服务。 但是,暂停的服务仍在运行,但已暂停其功能。 因此,暂停的服务不需要完成整个服务启动过程,但需要不同的过程才能恢复运行。

必须使用正确的方法来启动已停止的服务或恢复已暂停的服务。 在以下情况下,应使用 Win32_Service 方法 StartServiceResumeService

  • 如果某个服务当前已停止,则必须使用 StartService 方法重启它; ResumeService 无法启动当前已停止的服务。
  • 如果服务已暂停,则必须使用 ResumeService。 如果在暂停的服务上使用 StartService 方法,则会收到消息“该服务已在运行”。但是,在将恢复服务控制代码发送到该服务之前,该服务将保持暂停状态。

如果启动依赖于另一个服务的已停止服务,则会启动这两个服务。 使用此方法启动服务时,不会自动启动任何依赖服务。 必须使用关联类 Win32_DependentServiceAssociators 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 任务:服务