街中で見かけて「グッときた人」の思い出

VB6.0でAPIを使用して、サービスの停止/開始をしたいのですが、
サンプル等が少なく、APIの使い方がいまいちわかりません。

停止はできたのですが、
停止するまで待つ方法と、開始の方法がわかりません。

A 回答 (3件)

ここのサンプルはどうでしょうか?



http://www.vbstation.net/
 サンプル
  VB6-サービス
   2.WindowsNTサービス、デバイスの列挙(拡張版)

この回答への補足

出来ました!

補足日時:2006/10/31 21:04
    • good
    • 0
この回答へのお礼

ありがとうございます。

このページにはたどり着いたのですが、
サンプルまで探せませんでした。
見つけることができました!
試してみます。

お礼日時:2006/10/30 22:17

すみません。

ミス訂正で#2 を差し替えます。転記ミスです。

Public Function StopService( _
  ByVal ServiceName As String, _
  Optional ByVal WaitMilisecondTime As Long = 5000) As Long
  
  ' 目 的 : サービスの停止
  ' 引 数 : ServiceName サービス名 (String)
  ' 戻り値 : 成功:0 / 失敗:1 (Long)
  
  Dim ServiceList As Object
  Dim Service   As Object
  Dim Sql     As String
  Dim lRet    As String
  
  Sql = "Select * From Win32_Service Where Name='" & ServiceName & "'"
  Set ServiceList = CreateObject("WbemScripting.SWbemLocator") _
           .ConnectServer.ExecQuery(Sql)
  For Each Service In ServiceList
    If Service.State = "Running" Then
      lRet = Service.StopService()
      Sleep WaitMilisecondTime
    End If
  Next
  StopService = IIf(lRet = 0, 1, 0)
  Set ServiceList = Nothing

End Function
    • good
    • 0
この回答へのお礼

ありがとうございます。

確かにAPIより楽そうですね。
こういう方法があるとは知りませんでした。
勉強になりました。
もうAPIで作成してしまったのですが、
時間があったら試してみます!

お礼日時:2006/10/31 21:05

こんにちは。

KenKen_SP です。

API より WMI の方が楽じゃない?

Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Public Function StopService( _
  ByVal ServiceName As String, _
  Optional ByVal WaitMilisecondTime As Long = 5000) As Long
  
  ' 目 的 : サービスの停止
  ' 引 数 : ServiceName サービス名 (String)
  ' 戻り値 : 成功:0 / 失敗:1 (Long)
  
  Dim ServiceSet As Object
  Dim Service   As Object
  Dim Sql     As String
  Dim lRet    As String
  
  Sql = "Select * From Win32_Service Where Name='" & ServiceName & "'"
  Set ServiceList = CreateObject("WbemScripting.SWbemLocator") _
           .ConnectServer.ExecQuery(Sql)
  For Each Service In ServiceList
  If Service.State = "Running" Then
    lRet = Service.StopService()
    Sleep WaitMilisecondTime
  Next
  StopService = IIf(lRet = 0, 1, 0)
  Set ServiceSet = Nothing
End Function

待機については、サービスの状況を Service.State で調べられます。

  Running (動作中)
  Stopped (停止)

たいていは、この2つ。その他にも

  Paused (一時停止)
  Continuing (続行中)

がありますが。

サービス開始なら、Service.StartService() です。関数は別途作成して
下さい。エラーコードは StopService とは異なりますよ。0 で成功、
10 なら既に稼動中です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報