ServiceCommand – Start, stop, pause, and continue a Windows NT service

ServiceCommand – Start, stop, pause, and continue a Windows NT service

Private Type SERVICE_STATUS       dwServiceType As Long    dwCurrentState As Long    dwControlsAccepted As Long    dwWin32ExitCode As Long    dwServiceSpecificExitCode As Long    dwCheckPoint As Long    dwWaitHint As LongEnd TypePrivate Declare Function OpenSCManager Lib "advapi32.dll" Alias _    "OpenSCManagerA" (ByVal lpMachineName As String, _    ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As LongPrivate Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject _    As Long) As LongPrivate Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" _    (ByVal hSCManager As Long, ByVal lpServiceName As String, _    ByVal dwDesiredAccess As Long) As LongPrivate Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" _    (ByVal hService As Long, ByVal dwNumServiceArgs As Long, _    ByVal lpServiceArgVectors As Long) As LongPrivate Declare Function ControlService Lib "advapi32.dll" (ByVal hService As _    Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As LongConst GENERIC_EXECUTE = &H20000000Const SERVICE_CONTROL_STOP = 1Const SERVICE_CONTROL_PAUSE = 2Const SERVICE_CONTROL_CONTINUE = 3' start/stop/pause/continue a service' SERVICENAME is the internal name of the service' COMMAND can be   0=Start, 1=Stop, 2=Pause, 3=Continue'' returns True if successful, False otherwise' if any error, call Err.LastDLLError for more informationFunction ServiceCommand(ByVal ServiceName As String, ByVal command As Long) As _    Boolean    Dim hSCM As Long    Dim hService As Long    Dim res As Long    Dim lpServiceStatus As SERVICE_STATUS        ' first, check the command    If command < 0 Or command > 3 Then Err.Raise 5        ' open the connection to Service Control Manager, exit if error    hSCM = OpenSCManager(vbNullString, vbNullString, GENERIC_EXECUTE)    If hSCM = 0 Then Exit Function        ' open the given service, exit if error    hService = OpenService(hSCM, ServiceName, GENERIC_EXECUTE)    If hService = 0 Then GoTo CleanUp        ' start the service    Select Case command        Case 0            ' to start a service you must use StartService            res = StartService(hService, 0, 0)        Case SERVICE_CONTROL_STOP, SERVICE_CONTROL_PAUSE, _            SERVICE_CONTROL_CONTINUE            ' these commands use ControlService API            ' (pass a NULL pointer because no result is expected)            res = ControlService(hService, command, lpServiceStatus)    End Select    If res = 0 Then GoTo CleanUp        ' return success    ServiceCommand = TrueCleanUp:    If hService Then CloseServiceHandle hService    ' close the SCM    CloseServiceHandle hSCM    End Function

See also  Comparing different methods of testing your Infrastructure-as-Code

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist