Sign in to follow this  
Followers 0
_Chris_

Check for Running Service

10 posts in this topic

Hi, i need a way of checking if a service is running. Is their a way of doing this as i want to include this check in an if statment for an installer. I cant seem to find anything on services in the help file? Am i just not looking hard enough?

Share this post


Link to post
Share on other sites



The only way I know of to do anything like this is to use CScript and capture the output to StdOut. I don't have any code examples, but a search of these forums should yield at least a few results.

Share this post


Link to post
Share on other sites

Thanks guys thats briliant. WHat i need to be able to do is query whether an SQL service is running (MSSQL$TT). I want to use the status of the service in an if statment, e.g. if state = running then ... else ...

Any ideas??

Share this post


Link to post
Share on other sites

Thanks guys thats briliant. WHat i need to be able to do is query whether an SQL service is running (MSSQL$TT). I want to use the status of the service in an if statment, e.g. if state = running then ... else ...

Any ideas??

Just query for sql. SC is a command line tool to see what the installed services are doing. You can also use a vbscript with WMI to do this.

Here's a function that can be used to do this..........

Function ProcList

Dim objWMIService, objProcess, colProcess

Dim strComputer, strList, fso, f

Set fso = createobject("Scripting.FileSystemObject")

Set f = fso.createTextFile("c:\process.txt", True)

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" _

& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _

("Select * from Win32_Process")

For Each objProcess in colProcess

strList = strList & _

objProcess.Name & VbCrLf

Next

f.writeLine strList

f.close

End Function

Share this post


Link to post
Share on other sites

Thanks for your reply, im sorry im sure it works and all but i cant seem to figure out what i am going to do with that code!! Im still new to autoit and love it so i am really keen to learn more so i would appriciate some more help!!

Share this post


Link to post
Share on other sites

Thanks for the PMs. I will show the breakdown of handling the strings returned so you can use it if preferable.

$pid = Run('sc query dhcp', '', @SW_HIDE, 2)

Global $data

Do
    $data &= StdOutRead($pid)
Until @error

$data = StringSplit($data, @CRLF, 1)
If Not @error Then
    For $i = 1 To $data[0]
        ; Strip all whitespace
        $data[$i] = StringStripWS($data[$i], 8)
        If $data[$i] = '' Then
            ; Skip empty lines
            ContinueLoop
        ElseIf StringLeft($data[$i], 5) <> 'STATE' Then
            ; Skip lines that include no state
            ContinueLoop
        Else
            ; Remove "STATE:" and trim integer code
            $data[$i] = StringTrimLeft(StringReplace($data[$i], 'STATE:', ''), 1)
        EndIf
        ; Show compare to RUNNING and show result if True
        If $data[$i] = 'RUNNING' Then
            MsgBox(0, '', $data[$i])
        EndIf
    Next
EndIf

Yeah, as rmarino shows, WMI is available also. :P

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

many ways:

$service = "dhcp"
MsgBox(0, $service, _RetrieveServiceState(@ComputerName, $service))

Func _RetrieveServiceState($s_Machine, $s_ServiceName)
    Local Const $wbemFlagReturnImmediately = 0x10
    Local Const $wbemFlagForwardOnly = 0x20
    Local $colItems = "", $objItem
    Local $objWMIService = ObjGet("winmgmts:\\" & $s_Machine & "\root\CIMV2")
    If @error Then
        MsgBox(16, "_RetrieveServiceState", "ObjGet Error: winmgmts")
        Return
    EndIf
    $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Service WHERE Name = '" & $s_ServiceName & "'", "WQL", _
            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If @error Then
        MsgBox(16, "_RetrieveServiceState", "ExecQuery Error: SELECT * FROM Win32_Service")
        Return
    EndIf
    If IsObj($colItems) Then
        For $objItem In $colItems
            Return $objItem.State
        Next
    EndIf
EndFunc   ;==>_RetrieveServiceState
Edited by gafrost

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Share this post


Link to post
Share on other sites

Try this for an idea. Services have been covered in great amounts on the forum. Search is your friend.

$pid = Run('sc query dhcp', '', @SW_HIDE, 2)

Global $data

Do
    $data &= StdOutRead($pid)
Until @error

If StringInStr($data, 'running') Then
    MsgBox(0, 'Running', $data)
Else
    MsgBox(0, 'Not Running', $data)
EndIf

;)

Hi,

Thank you for the script.

I run 2 MySQL services on Windows XP, and ProcessExists can't tell which mysqld-nt.exe is running.

Your script is exactly what I'm looking for. :)

Share this post


Link to post
Share on other sites

Greetings!,

I am relatively new to AuoIT so hope this doesn't sound like dumb question. I have below script and it works fine when I run once but I want it to run continuously to monitor the service and alert me when service goes down. The script also starts the service back up. Again a very noob question but how do I run this script in a continuous loop. Thanks.

Code Below:

-------------------------------------------------------------------------

#include <smtp.au3>

$GmailUser = "blah1@gmail.com"

$GmailPass = "12345678"

$ToEmail = "blah2@gmail.com"

$pc = @ComputerName

$service = "PeerDistSvc";BranchCache service

$pid = Run('sc query PeerDistSvc', '', @SW_HIDE, 2)

Global $data

Do

$data &= StdoutRead($pid)

Until @error

If StringInStr($data, 'running') Then

Else

RunWait(@ComSpec & " /c " & "sc \\" & $pc & " start " & $service, "", @SW_HIDE)

_INetSmtpMailCom("smtp.gmail.com", @ComputerName, $ToEmail, $ToEmail, $GmailUser, $GmailPass, "Service " & $service & " is down", "Service is down")

EndIf

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0