VBS/WSH/JS - [решено] Запрет на повторный запуск процесса

Ответить
Аватара пользователя
sergeypele

VBS/WSH/JS - [решено] Запрет на повторный запуск процесса

Сообщение sergeypele »

Добрый день, помогите плиз.

есть такой скрипт Нужно чтобы отслеживал процесс, если запущен, то запрещал повторный запуск

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

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

& strComputer & "\root\cimv2")



Set colProcesses = objWMIService.ExecQuery( _

"Select Name From Win32_Process " _

& "Where Name = 'cashserv.exe'")



If colProcesses.Count = 0 Then

Set objShell = Wscript.CreateObject("Wscript.Shell")

Set objEnv = objShell.Environment("Process")

objShell.Run """" + objEnv("") + "cashserv.exe"""

Else

MsgBox "Программы уже запущена. Для перезапуска закройте ее.", 48, "Внимание"

End If
Аватара пользователя
DmitriiV

Re: VBS/WSH/JS - [решено] Запрет на повторный запуск процесса

Сообщение DmitriiV »

Пример сценария, который позволяет запускать указанный процесс либо в количестве, не большем, чем количество таких процессов на момент запуска сценария, либо в единственном экземпляре.


читать дальше »




Код:

Код: Выделить всё

Dim objWMI, objCollection, objItem
Dim strComputer, strProcess, intLimit
Dim objDict, strHandle, strTemp
strComputer = "."
strProcess = "myprocess.exe"
Set objDict = CreateObject("Scripting.Dictionary")
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objCollection = objWMI.ExecQuery("SELECT Handle FROM Win32_Process WHERE Name='" & strProcess & "'")
If objCollection.Count = 0 Then
    intLimit = 1
Else
    For Each objItem In objCollection
        objDict.Add objItem.Handle, True
    Next
    intLimit = objDict.Count
End If
Set objCollection = objWMI.ExecNotificationQuery("SELECT * FROM __InstanceOperationEvent " _
        & "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='" & strProcess & "'")
On Error Resume Next
Do
    Set objItem = objCollection.NextEvent
    Select Case objItem.Path_.Class
        Case "__InstanceCreationEvent"
            strTemp = objItem.TargetInstance.Handle
            If objDict.Count < intLimit Then
                objDict.Add strTemp, True
            Else
                objWMI.Get("Win32_Process.Handle='" & strTemp & "'").Terminate
                If Err.Number  0 Then Err.Clear
            End If
        Case "__InstanceDeletionEvent"
            strTemp = objItem.TargetInstance.Handle
            If objDict.Exists(strTemp) Then
                objDict.Remove strTemp
            End If
    End Select
Loop
Set objItem = Nothing
Set objCollection = Nothing
Set objWMI = Nothing
Set objDict = Nothing
WScript.Quit 0
Ответить

Вернуться в «Скриптовые языки администрирования Windows»