Win32_Service 類別的 StopService 方法 (Sdoias.h)
StopService WMI 類別方法會將服務置於已停止狀態的 Win32_Service 物件表示。
本主題使用Managed物件格式 (MOF) 語法。 如需使用此方法的詳細資訊,請參閱 呼叫方法。
語法
uint32 StopService();
參數
這個方法沒有任何參數。
傳回值
傳回下列清單中所列的其中一個值,或任何其他值,以指出錯誤。 如需其他錯誤碼,請參閱 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
-
服務目前在系統中暫停。
備註
在您判斷哪些服務可以停止或暫停之後,您可以使用 StopService 和 PauseService 方法來停止和暫停服務。 停止服務而不是暫停服務的決策,反之亦然,取決於數個因素,包括下列各項:
- 服務是否能夠暫停? 如果沒有,您唯一的選項就是停止服務。
- 您需要繼續處理已連線至服務之任何人的用戶端要求嗎? 如果是,暫停服務通常允許它處理現有的用戶端,同時拒絕存取新的用戶端。 相較之下,當您停止服務時,所有客戶端都會立即中斷連線。
- 您是否需要重新設定服務,並立即生效變更? 雖然服務屬性可以在服務暫停時變更,但在服務實際停止並重新啟動之前,大部分屬性都不會生效。
停止服務所需的腳本程式代碼幾乎與暫停服務所需的程式代碼完全相同。
如果您嘗試停止執行相依服務的服務, StopService 方法會失敗,傳回值為 3。 相依服務必須先停止。
如果您停止服務,請立即檢查 Win32_Service。State 屬性,因為值可能仍會顯示服務正在執行中。
範例
下列 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 |
Namespace |
Root\CIMV2 |
標頭 |
|
MOF |
|
DLL |
|