Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


В меру моего понимания Вашей постановки задачи
Код: Выделить весь код
exe1 = "notepad.exe"
exe2 = "calc.exe"
exe3 = "ftp.exe"

TimeWait = 3    ' Время опроса наличия exe2

PScript = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
' PScript = "C:\Windows\System32\"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winMgmts:")
Set WshS = CreateObject("WScript.Shell")

Msg = ""
If Not FSO.FileExists(PScript + exe1) Then Msg = Msg + vbCrLf + exe1
If Not FSO.FileExists(PScript + exe2) Then Msg = Msg + vbCrLf + exe2
If Not FSO.FileExists(PScript + exe3) Then Msg = Msg + vbCrLf + exe3

If Not Len(Msg) = 0 Then
    Msg = "В папке" + vbCrLf + PScript + vbCrLf + "Отсутствует:" + vbCrLf + Msg
    MsgBox Msg
Else
                                    ' Если выполняется exe3, то, если есть, убиваем exe1 и exe2 и ничего не делаем
    
    If ExistProc(exe3, False) Then
        Answer = ExistProc(exe1, True)
        Answer = ExistProc(exe2, True)
        MsgBox "Выполняется " + exe3
        WScript.Quit
    End If
                                    ' Если выполняется exe1, и нет exe2 то завершаем exe1 и запускаем exe3
    
    If ExistProc(exe1, False) And Not ExistProc(exe2, False) Then
        Answer = ExistProc(exe1, True)
        Answer = WshS.Run(PScript + exe3, 1, False)
        WScript.Quit
    End If
                                    ' Если выполняется exe1, и exe2 то ждем завершения exe2
    
    If ExistProc(exe1, False) And ExistProc(exe2, False) Then
        Msg = "Выполняются " + vbCrLf + vbCrLf + exe1 + vbCrLf + exe2 + vbCrLf + vbCrLf + "Ожидание завершения пользователем" + vbCrLf + vbCrLf + exe2
        Answer = WshS.Popup(Msg, 10, "Информация к сведению", 0)
    Else
                                      ' Запускаем exe1 и exe2 
        Answer = ExistProc(exe1, True)
        Answer = ExistProc(exe2, True)
        Answer = WshS.Run(PScript + exe1, 1, False)
        Answer = WshS.Run(PScript + exe2, 1, False)
    End If
                                       ' После завершения exe2 убьем exe1 и запустим exe3 
    Do
        If ExistProc(exe2, False) Then
            WScript.Sleep(TimeWait*1000)
        Else
            Answer = ExistProc(exe1, True)
            Answer = WshS.Run(PScript + exe3, 1, False)
            Exit Do
        End If
    Loop
End If


Function ExistProc(NProc, Cancel)
    SQuery = "Select * From Win32_Process Where Name=" + """" + NProc + """"
    Set Processes = WMI.ExecQuery(SQuery)
    ExistProc = (Processes.Count <> 0)
    If ExistProc And Cancel Then
        For Each Process In Processes
            Process.Terminate
        Next
        'WScript.Sleep 2000
    End If
End Function

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 01-04-2017 в 14:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:19, 01-04-2017 | #4