次の方法で共有


Win32_Service クラスの StopService メソッド (Sdoias.h)

StopServiceWMI クラス メソッドは、Win32_Service オブジェクトで表されるサービスを停止状態にします。

このトピックでは、マネージド オブジェクト形式 (MOF) 構文を使用します。 このメソッドの使用方法の詳細については、「メソッドの 呼び出し」を参照してください。

構文

uint32 StopService();

パラメーター

このメソッドにはパラメーターはありません。

戻り値

次の一覧に記載されている値の 1 つ、またはエラーを示すその他の値を返します。 その他のエラー コードについては、「 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 プロパティ。

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
Header
Sdoias.h
MOF
CIMWin32.mof
[DLL]
CIMWin32.dll

こちらもご覧ください

オペレーティング システム クラス

Win32_Service

WMI タスク: サービス

PauseService