sergeypele |
29-04-2013 16:23 2141724 |
Запрет на повторный запуск процесса
Добрый день, помогите плиз.
есть такой скрипт Нужно чтобы отслеживал процесс, если запущен, то запрещал повторный запуск
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
|
Пример сценария, который позволяет запускать указанный процесс либо в количестве, не большем, чем количество таких процессов на момент запуска сценария, либо в единственном экземпляре.
читать дальше »
Код:
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
|
sergeypele |
06-05-2013 14:10 2145304 |
Спасибо огромное, то что надо!!!!
|
Время: 22:59.
© OSzone.net 2001-