Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов

Ответить
Настройки темы
VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов

Новый участник


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

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


Изменения
Автор: id342181564@vk
Дата: 31-03-2017
Всем доброго дня ! Посоветуйте пожалуйста , как лучше реализовать следующую последовательность действий в VBS :

Допустим, есть исполняемые файлы - 1.exe,2.exe,3.exe

0. проверка наличия 1.exe,2.exe,3.exe в папке со скриптом и в случае отсутсвия одного или нескольких файлов - появление MSGBOX с произвольным текстом и перечисление отсутствующих файлов. В случае появления MSGBOX - пункты 1,2,3 пропускаются - скрипт завершается.
1. проверка наличия запущенного процесса 1.exe и в случае его ..кхм...наличия - завершение процесса и запуск 3.exe.
2. одновременное выполнение 1.exe, а затем 2.exe (без ожидания завершения 1.exe)
3. ожидание завершения 2.exe пользователем, а затем завершение процесса 1.exe и после - выполнение 3.exe

Отправлено: 12:44, 31-03-2017

 

Ветеран


Contributor


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

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


id342181564@vk,
Цитата:
1. проверка наличия запущенного процесса 1.exe и в случае его ..кхм...наличия - завершение процесса и запуск 3.exe.
кхм, а дальше что? 2 и 3 делать? или нет? А если в 1 наличствует не только 1.exe но и 2.exe? что делать?

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


Отправлено: 16:46, 31-03-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


а дальше по порядку)
Цитата megaloman:
А если в 1 наличствует не только 1.exe но и 2.exe? что делать? »
- игнорировать и продолжать по пунктам.

Отправлено: 16:48, 31-03-2017 | #3


Ветеран


Contributor


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

Профиль | Отправить 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


Новый участник


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

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


спасибо большое) всё работает , осталось только изучить в подробностях и кое что подправить. К примеру : PScript = "C:\Windows\System32\" - эта строка определяет путь к файлам ? Если убрать PScript из строчек вроде : Answer = WshS.Run(PScript + exe1, 1, False) - всё работает на отлично - в противном случае, выдает ошибку об отсутствии файла (хотя msgbox не появляется, если файлы лежат в той же папке - что и скрипт, что в общем то и требовалось).

Последний раз редактировалось id342181564@vk, 03-04-2017 в 10:18.


Отправлено: 10:01, 03-04-2017 | #5


Новый участник


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

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


Еще хотел спросить по поводу этого пункта
Код
' Если выполняется exe1, и нет exe2 то завершаем exe1 и запускаем exe3

If ExistProc(exe1, False) And Not ExistProc(exe2, False) Then
Answer = ExistProc(exe1, True)
Answer = WshS.Run(exe3, 1, False)
WScript.Quit
End If


- тут по задумке скрипт должен не завершаться на выполнении exe3 - а начинать выполнение заново , либо с запуска только что завершенного exe1 и затем exe2 , и далее продолжать работу. Как это лучше реализовать?

Отправлено: 10:34, 03-04-2017 | #6


Ветеран


Contributor


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

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


id342181564@vk, строка ' PScript = "C:\Windows\System32\" начинается с апострофа ', она не исполняется, мне она была нужна для отладки для ссылок на существующие файлы. В предыдущей строке определяется путь к скрипту, Вы требовали, чтобы екзешники лежали в той же папке, и в таких условиях это работает. Если все файлы лежат по одному пути, то в закомментированной строке уберите апостроф и пропишите свой путь. Если для каждого экзешника Вы хотите указывать персональный путь, примените PScript = "", а вместо имени файла укажите полный путь имени файла.

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

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

Отправлено: 13:35, 03-04-2017 | #7


Новый участник


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

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


спасибо большое за столь развернутый ответ и труды) все работает отлично !
Хотел спросить вас еще на тему VBS, то это уже будет немного оффтоп - если конечно вас не затруднит?

Отправлено: 16:06, 03-04-2017 | #8


Ветеран


Contributor


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

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


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

TimeWait = 3    ' Время опроса наличия exe2
TimePause = 60  ' Время ожидания перезапуска скрипта

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

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

Continue = True

Do While Continue

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
    WScript.Quit
Else
  Do
                                    ' Если выполняется exe3, то ничего не делаем
    If ExistProc(exe3, False) Then
        Answer = ExistProc(exe1, True)
        Answer = ExistProc(exe2, True)
        Msg = "Выполняется " + exe3 + vbCrLf + "Ждём её завершения?"
        Answer = WshS.Popup(Msg, TimePause, "Как поступаем?", 33)
        Continue = Not (Answer = 2)
        Exit Do
    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, True)
        Exit Do
    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
        Answer = ExistProc(exe1, True)
        Answer = ExistProc(exe2, True)
        Answer = WshS.Run(PScript + exe1, 1, False)
        Answer = WshS.Run(PScript + exe2, 1, False)
    End If
    Do
        If ExistProc(exe2, False) Then
            WScript.Sleep (TimeWait * 1000)
        Else
            Answer = ExistProc(exe1, True)
            Answer = WshS.Run(PScript + exe3, 1, True)
            Exit Do
        End If
    Loop
    Exit Do
  Loop
End If
  If Continue Then
      Msg = "Завершилась " + exe3 + vbCrLf + "Продолжим работу скрипта?"
      Answer = WshS.Popup(Msg, TimePause, "Как поступаем?", 33)
      Continue = Not (Answer = 2)
  End If
Loop


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
После отработки exe3 скрипт выдаст запрос, что делать дальше. Это сделано для того, чтобы легально можно было завершить скрипт. Если в течение некоторого времени не будет нажато ничего или нажат ОК, запуск программ повторится.
Цитата:
Хотел спросить вас еще на тему VBS, то это уже будет немного оффтоп - если конечно вас не затруднит
Формулируйте проблему, надеюсь, найдутся желающие её разрешить. За спрос не бьют в нос.

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


Последний раз редактировалось megaloman, 03-04-2017 в 21:27.


Отправлено: 21:17, 03-04-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Проверка наличия процесса botkin1 Скриптовые языки администрирования Windows 0 12-05-2016 07:33
CMD/BAT - Проверка наличия нескольких строк в файле V!RTuE Скриптовые языки администрирования Windows 10 08-09-2014 05:08
CMD/BAT - проверка наличия файлов neprotiv Скриптовые языки администрирования Windows 0 04-04-2013 22:09
VBS/WSH/JS - [решено] Проверка наличия файлов в папке lesha73 Скриптовые языки администрирования Windows 2 17-01-2012 16:45
Любой язык - [решено] Проверка наличия обновления SANIOK_AV Скриптовые языки администрирования Windows 4 18-08-2011 14:47




 
Переход