Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ожидание процессов с разной поледовательностью запуска для их завершения. (http://forum.oszone.net/showthread.php?t=232258)

Devils Night 07-04-2012 09:33 1895001

Ожидание процессов с разной поледовательностью запуска для их завершения.
 
В общем задача такая, как сделать так чтобы например запустил батник, и этот батник работал до тех пор пока не появится процесс program.exe, после появления этого процесса батник его бы сразу завершал и закрывался, возможно ли такое!?

Iska 07-04-2012 09:40 1895003

Например, так.

Devils Night 07-04-2012 09:55 1895006

Iska, Ага, то есть получается вот так?
Код:

:Repeat
    >nul ping.exe -n 2 127.0.0.1
    taskkill.exe /f /im "setup.exe" || goto :Repeat

Сейчас кое что проверил, и тут вышла одна проблема, по которой такой вопрос:
а что если процесса два и более, например program.exe, program2.exe, program3.exe и причём последовательность их запуска меняется, это как нибудь решается?

Iska 07-04-2012 10:10 1895010

Ожидаем появления любого из «program.exe», «program2.exe», «program3.exe», закрываем его и завершаем работу пакетного файла — так?

Devils Night 07-04-2012 10:13 1895011

Iska, Именно.

Iska 07-04-2012 10:22 1895013

Тогда предложу WSH:
читать дальше »
Код:

Option Explicit

Dim arrProcesses

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource

Dim strProcess


arrProcesses = Array("notepad.exe", "calc.exe", "freecell.exe")
strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx  = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
        "SELECT * FROM __InstanceCreationEvent " & _
        "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Do
        With objSWbemEventSource.NextEvent.TargetInstance
                For Each strProcess In arrProcesses
                        If UCase(.Name) = UCase(strProcess) Then
                                .Terminate
                               
                                Exit Do
                        End If
                Next
        End With
Loop

Set objSWbemEventSource = Nothing
Set objSWbemServicesEx  = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0


Devils Night 07-04-2012 10:45 1895025

Iska, Спасибо, я так понимаю это в один из файлов vbs, wsf, wsf вставлять этот код, потом от командной строки запустить?

Iska 07-04-2012 10:59 1895031

Да:
Цитата:

Цитата Devils Night
vbs »



Время: 16:10.

Время: 16:10.
© OSzone.net 2001-