共用方式為


Win32_Service 類別的 StartService 方法 (CIMWin32 WMI 提供者)

StartService 方法會嘗試將參考的服務放入其啟動狀態。

本主題使用Managed物件格式 (MOF) 語法。 如需使用此方法的詳細資訊,請參閱 呼叫方法

語法

uint32 StartService();

參數

這個方法沒有任何參數。

傳回值

傳回下列清單中所列的其中一個值,或任何其他值,以指出錯誤。 如需其他錯誤碼,請參閱 WMI 錯誤常數WbemErrorEnum 如需一般 HRESULT 值,請參閱 系統錯誤碼

0

已接受要求。

1

不支援此要求。

2

用戶沒有必要的存取權。

3

無法停止服務,因為正在執行的其他服務相依於它。

4

要求的控制程式代碼無效,或服務無法接受。

5

要求的控制程式代碼無法傳送至服務,因為服務的狀態 (Win32_BaseServiceState 屬性) 等於 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方法 StartService 和 ResumeService 應該在下列情況下使用:

  • 如果服務目前已停止,您必須使用 StartService 方法來重新啟動它; ResumeService 無法啟動目前停止的服務。
  • 如果服務已暫停,您必須使用 ResumeService 如果您在 暫停的服務上使用 StartService 方法,您會收到「服務已在執行中」訊息。不過,服務會維持暫停狀態,直到繼續服務控制程式代碼傳送至該服務為止。

如果您啟動相依於另一個服務的已停止服務,則會啟動這兩個服務。 使用此方法啟動服務時,不會自動啟動任何相依服務。 您必須使用關聯類別 Win32_DependentServiceAssociators Of 查詢來找出相依專案,並個別啟動它們。

範例

下列 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
Namespace
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

另請參閱

作業系統類別

Win32_Service

WMI 工作:服務