//使用CloseServiceHandle停止服务吧CloseServiceHandle的作用是关闭服务,想要关闭服务必须先停止服务,用ControlService可以停止服务(第2个参数传入,SERVICE _CONTROL_STOP),不过楼主现在知道的是进程名,而不是服务名,所以我估计这个方法很难奏效,下面是一个模块,你参考一下:Public Const MachineName = "s1" Public Const ServiceName = "Schedule" Public Const SERVICES_ACTIVE_DATABASE = "ServicesActive" ' Controls Public Const SERVICE_CONTROL_STOP = &H1 Public Const SERVICE_CONTROL_PAUSE = &H2 ' Service State -- for CurrentState Public Const SERVICE_STOPPED = &H1 Public Const SERVICE_START_PENDING = &H2 Public Const SERVICE_STOP_PENDING = &H3 Public Const SERVICE_RUNNING = &H4 Public Const SERVICE_CONTINUE_PENDING = &H5 Public Const SERVICE_PAUSE_PENDING = &H6 Public Const SERVICE_PAUSED = &H7 ' Service Control Manager object specific access types Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const SC_MANAGER_CONNECT = &H1 Public Const SC_MANAGER_CREATE_SERVICE = &H2 Public Const SC_MANAGER_ENUMERATE_SERVICE = &H4 Public Const SC_MANAGER_LOCK = &H8 Public Const SC_MANAGER_QUERY_LOCK_STATUS = &H10 Public Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20 Public Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG) 'Service object specific access types Public Const SERVICE_QUERY_CONFIG = &H1 Public Const SERVICE_CHANGE_CONFIG = &H2 Public Const SERVICE_QUERY_STATUS = &H4 Public Const SERVICE_ENUMERATE_DEPENDENTS = &H8 Public Const SERVICE_START = &H10 Public Const SERVICE_STOP = &H20 Public Const SERVICE_PAUSE_CONTINUE = &H40 Public Const SERVICE_INTERROGATE = &H80 Public Const SERVICE_USER_DEFINED_CONTROL = &H100 Public Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL) Type SERVICE_STATUS dwServiceType As Long dwCurrentState As Long dwControlsAccepted As Long dwWin32ExitCode As Long dwServiceSpecificExitCode As Long dwCheckPoint As Long dwWaitHint As Long End Type Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long Declare Function QueryServiceStatus Lib "advapi32.dll" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long Public Sub ServiceStatus(Computer As String, Service As String) Dim ServiceStatus As SERVICE_STATUS Dim lhSCManager As Long Dim lhService As Long Dim lhServiceStatus As Long lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
If lhServiceStatus <> 0 Then Select Case ServiceStatus.dwCurrentState Case SERVICE_STOPPED MsgBox "Stopped" Case SERVICE_START_PENDING MsgBox " Start Pending" Case SERVICE_STOP_PENDING MsgBox "Stop Pending" Case SERVICE_RUNNING MsgBox "Running" Case SERVICE_CONTINUE_PENDING MsgBox "Coninue Pending" Case SERVICE_PAUSE_PENDING MsgBox "Pause Pending" Case SERVICE_PAUSED MsgBox "Paused" End Select End If CloseServiceHandle lhService End If CloseServiceHandle lhSCManager End If End Sub Public Sub vbPauseService(Computer As String, Service As String) Dim ServiceStatus As SERVICE_STATUS Dim lhSCManager As Long Dim lhService As Long Dim lresult As Long
lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS) If lhSCManager <> 0 Then lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then lresult = ControlService(lhService, SERVICE_CONTROL_PAUSE, ServiceStatus) CloseServiceHandle lhService End If CloseServiceHandle lhSCManager End If
End Sub Public Sub vbStartService(Computer As String, Service As String) Dim ServiceStatus As SERVICE_STATUS Dim lhSCManager As Long Dim lhService As Long Dim lresult As Long
If lhSCManager <> 0 Then lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then lresult = StartService(lhService, 0, 0) CloseServiceHandle lhService End If CloseServiceHandle lhSCManager End If
End Sub Public Sub vbStopService(Computer As String, Service As String) Dim ServiceStatus As SERVICE_STATUS Dim lhSCManager As Long Dim lhService As Long Dim lresult As Long
If lhSCManager <> 0 Then lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then lresult = ControlService(lhService, SERVICE_CONTROL_STOP, ServiceStatus) CloseServiceHandle lhService End If CloseServiceHandle lhSCManager End If End Sub
上面的看不太懂哦,如果使用closeservicehandle 关闭已知服务名称 pcAnywhere Host Service 那需要怎么做?
http://vip.6to23.com/nowcan1/tech/win2kIO.htm
Public Const ServiceName = "Schedule"
Public Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
' Controls
Public Const SERVICE_CONTROL_STOP = &H1
Public Const SERVICE_CONTROL_PAUSE = &H2 ' Service State -- for CurrentState
Public Const SERVICE_STOPPED = &H1
Public Const SERVICE_START_PENDING = &H2
Public Const SERVICE_STOP_PENDING = &H3
Public Const SERVICE_RUNNING = &H4
Public Const SERVICE_CONTINUE_PENDING = &H5
Public Const SERVICE_PAUSE_PENDING = &H6
Public Const SERVICE_PAUSED = &H7 ' Service Control Manager object specific access types
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SC_MANAGER_CONNECT = &H1
Public Const SC_MANAGER_CREATE_SERVICE = &H2
Public Const SC_MANAGER_ENUMERATE_SERVICE = &H4
Public Const SC_MANAGER_LOCK = &H8
Public Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
Public Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20 Public Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)
'Service object specific access types
Public Const SERVICE_QUERY_CONFIG = &H1
Public Const SERVICE_CHANGE_CONFIG = &H2
Public Const SERVICE_QUERY_STATUS = &H4
Public Const SERVICE_ENUMERATE_DEPENDENTS = &H8
Public Const SERVICE_START = &H10
Public Const SERVICE_STOP = &H20
Public Const SERVICE_PAUSE_CONTINUE = &H40
Public Const SERVICE_INTERROGATE = &H80
Public Const SERVICE_USER_DEFINED_CONTROL = &H100 Public Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL) Type SERVICE_STATUS
dwServiceType As Long
dwCurrentState As Long
dwControlsAccepted As Long
dwWin32ExitCode As Long
dwServiceSpecificExitCode As Long
dwCheckPoint As Long
dwWaitHint As Long
End Type Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long
Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long
Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
Declare Function QueryServiceStatus Lib "advapi32.dll" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long
Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long Public Sub ServiceStatus(Computer As String, Service As String)
Dim ServiceStatus As SERVICE_STATUS
Dim lhSCManager As Long
Dim lhService As Long
Dim lhServiceStatus As Long lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
If lhSCManager <> 0 Then
lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then
lhServiceStatus = QueryServiceStatus(lhService, ServiceStatus)
If lhServiceStatus <> 0 Then
Select Case ServiceStatus.dwCurrentState
Case SERVICE_STOPPED
MsgBox "Stopped"
Case SERVICE_START_PENDING
MsgBox " Start Pending"
Case SERVICE_STOP_PENDING
MsgBox "Stop Pending"
Case SERVICE_RUNNING
MsgBox "Running"
Case SERVICE_CONTINUE_PENDING
MsgBox "Coninue Pending"
Case SERVICE_PAUSE_PENDING
MsgBox "Pause Pending"
Case SERVICE_PAUSED
MsgBox "Paused"
End Select
End If
CloseServiceHandle lhService
End If
CloseServiceHandle lhSCManager
End If End Sub
Public Sub vbPauseService(Computer As String, Service As String)
Dim ServiceStatus As SERVICE_STATUS
Dim lhSCManager As Long
Dim lhService As Long
Dim lresult As Long
lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
If lhSCManager <> 0 Then
lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then
lresult = ControlService(lhService, SERVICE_CONTROL_PAUSE, ServiceStatus)
CloseServiceHandle lhService
End If
CloseServiceHandle lhSCManager
End If
End Sub
Public Sub vbStartService(Computer As String, Service As String)
Dim ServiceStatus As SERVICE_STATUS
Dim lhSCManager As Long
Dim lhService As Long
Dim lresult As Long
lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
If lhSCManager <> 0 Then
lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then
lresult = StartService(lhService, 0, 0)
CloseServiceHandle lhService
End If
CloseServiceHandle lhSCManager
End If
End Sub
Public Sub vbStopService(Computer As String, Service As String)
Dim ServiceStatus As SERVICE_STATUS
Dim lhSCManager As Long
Dim lhService As Long
Dim lresult As Long
lhSCManager = OpenSCManager(Computer, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
If lhSCManager <> 0 Then
lhService = OpenService(lhSCManager, Service, SERVICE_ALL_ACCESS)
If lhService <> 0 Then
lresult = ControlService(lhService, SERVICE_CONTROL_STOP, ServiceStatus)
CloseServiceHandle lhService
End If
CloseServiceHandle lhSCManager
End If
End Sub
http://blog.csdn.net/online/archive/2004/08/09/68870.aspx
Public Const ServiceName = "Schedule"
这一句做相应修改
xp下自己试试。