1

Тема: VBS: Необходимо слежение за службой

Добрый день. Подскажите, как реализовать слежение за службой (она иногда отваливается, но режим остается Started, при этом служба перестает работать), то есть нужно как-то проверить, именно работает она или нет. Заранее спасибо.

2

Re: VBS: Необходимо слежение за службой

А при чём тут «.Started»? Это говорит лишь о том, что служба была запущена. Каково свойство «.State» службы:

wmic.exe service <имя службы> get State /value

в тот момент, когда «она … отваливается»?

3

Re: VBS: Необходимо слежение за службой

Получаем состояние службы "MSSQLSERVER"(на основе заготовки из WMICodeCreator):

option explicit
Dim strComputer, objWMIService, colServiceList, objService
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colServiceList = objWMIService.ExecQuery("select State, Status from Win32_Service where Name='MSSQLSERVER'")
For Each objService in colServiceList
 Wscript.Echo objService.Name & "=> State: " & objService.State & "; Status: " & objService.Status
Next

Единственное, не могу сказать какие значения будут у State&Status когда сервис не отвечает(не знаю как смоделировать ситуацию :). Кстати, программа сама является сервисом или "сервис" стартует другое ПО(например, как srvany)? Т.е. когда "режим остается Started, при этом служба перестает работать"("Started" я так понимаю в оснастке управления службами? После нажатия F5 он не меняется?) исполняемый файл службы в процессах остаётся или исчезает?

MSDN: Win32_Service Class

4

Re: VBS: Необходимо слежение за службой

Надо отслеживать события (Events), асинхронно...
как освобожусь, нацарапаю...   пока занят...

Времени не хватает... :-(

5

Re: VBS: Необходимо слежение за службой

Дико извиняюсь за задержку, но был занят...
вот код.

strComputer="."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
objWMIService.ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Service'"

Set fso = CreateObject("Scripting.FileSystemObject")


Do while 1=1   
    WScript.Sleep 1000
Loop

'******************************************************************************
        
Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)

If objLatestEvent.TargetInstance.Name="Browser" Then
Set objFile = fso.OpenTextFile("monitor.log", 8, True) 
objFile.WriteLine  Now & objLatestEvent.TargetInstance.State
objFile.Close
End If
End Sub
Времени не хватает... :-(