Win32_Service 類別的 StartService 方法 (CIMWin32 WMI 提供者)
StartService 方法會嘗試將參考的服務放入其啟動狀態。
本主題使用Managed物件格式 (MOF) 語法。 如需使用此方法的詳細資訊,請參閱 呼叫方法。
語法
uint32 StartService();
參數
這個方法沒有任何參數。
傳回值
傳回下列清單中所列的其中一個值,或任何其他值,以指出錯誤。 如需其他錯誤碼,請參閱 WMI 錯誤常數或 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
-
服務目前在系統中暫停。
備註
雖然已停止的服務與暫停的服務之間似乎沒有任何實際差異,但兩個狀態與 SCM 不同。 已停止的服務是未執行且必須經過整個服務啟動程序的服務。 不過,暫停的服務仍在執行中,但已暫停其運作。 因此,暫停的服務不需要經過整個服務啟動程式,但需要不同的程式才能繼續運作。
您必須使用適當的方法來啟動已停止的服務,或繼續暫停的服務。 Win32_Service方法 StartService 和 ResumeService 應該在下列情況下使用:
- 如果服務目前已停止,您必須使用 StartService 方法來重新啟動它; ResumeService 無法啟動目前停止的服務。
- 如果服務已暫停,您必須使用 ResumeService。 如果您在 暫停的服務上使用 StartService 方法,您會收到「服務已在執行中」訊息。不過,服務會維持暫停狀態,直到繼續服務控制程式代碼傳送至該服務為止。
如果您啟動相依於另一個服務的已停止服務,則會啟動這兩個服務。 使用此方法啟動服務時,不會自動啟動任何相依服務。 您必須使用關聯類別 Win32_DependentService 和 Associators 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 |
|
DLL |
|