サービスを開始する: Win32_Service - WMI Sample (VB)
Topics
特定のサービスを開始するサンプルプログラムです。
Win32_Service クラスを使用します。
VBS (WSH) 版のサンプルコードはこちらで公開しています。
Sample Code
Private Sub Command1_Click()
Dim SerSet As SWbemObjectSet
Dim Ser As SWbemObject
Dim Locator As SWbemLocator
Dim Service As SWbemServices
Dim Ret As Long
Set Locator = New WbemScripting.SWbemLocator
Set Service = Locator.ConnectServer
Set SerSet = Service.ExecQuery("Select * From Win32_Service Where Name='Alerter'")
For Each Ser In SerSet
Ret = Ser.StartService()
Next
If Ret = 0 Then
MsgBox "サービスの開始に成功しました。"
Else
MsgBox "サービスの開始に失敗しました。"
End If
Set SerSet = Nothing
Set Ser = Nothing
Set Service = Nothing
Set Locator = Nothing
End Sub
Comment
今回サービスを開始するサンプルを実行する為に、Alerter サービスをテストとして使用します。もちろんサービスを開始するサンプルですのでこのサービスをすでに使用していて開始していればサンプルの実行が失敗します。
StartService メソッドを使用してサービスを開始します。このメソッドを実行すると結果が帰ってきます。0 であれば成功ですがそれ以外の値が帰ってくれば何かしらの理由で失敗したことになります。それ以外の値が示すエラーステータスは、
0: 要求が受け入れられました。
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: サービスは現在システムで一時停止されています。
以上になります。
なお WMI の使い方(VB6, VBS, VBA, VB.NET, VC#, PowerShell を対象) に関しては、WMI Step も参考にしてみてください。(WMI 初心者・入門編としてもおすすめです。)
各種言語を使用したWMIを使用するたたき台としてソースコードテンプレートも公開しています。WMI プログラム/スクリプト作成時に役立てば…と思っています。
Recommended book
個人的にお勧めする本の紹介です。