|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов |
|
VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов
|
Новый участник Сообщения: 10 |
Профиль | Сайт | Отправить PM | Цитировать
Всем доброго дня ! Посоветуйте пожалуйста , как лучше реализовать следующую последовательность действий в 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 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать id342181564@vk,
Цитата:
|
|
------- Отправлено: 16:46, 31-03-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Сайт | Отправить PM | Цитировать а дальше по порядку)
Цитата megaloman:
|
|
Отправлено: 16:48, 31-03-2017 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить 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
|
Профиль | Сайт | Отправить 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
|
Профиль | Сайт | Отправить 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 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать id342181564@vk, строка ' PScript = "C:\Windows\System32\" начинается с апострофа ', она не исполняется, мне она была нужна для отладки для ссылок на существующие файлы. В предыдущей строке определяется путь к скрипту, Вы требовали, чтобы екзешники лежали в той же папке, и в таких условиях это работает. Если все файлы лежат по одному пути, то в закомментированной строке уберите апостроф и пропишите свой путь. Если для каждого экзешника Вы хотите указывать персональный путь, примените PScript = "", а вместо имени файла укажите полный путь имени файла.
|
------- Отправлено: 13:35, 03-04-2017 | #7 |
Новый участник Сообщения: 10
|
Профиль | Сайт | Отправить PM | Цитировать спасибо большое за столь развернутый ответ и труды) все работает отлично !
Хотел спросить вас еще на тему VBS, то это уже будет немного оффтоп - если конечно вас не затруднит? |
Отправлено: 16:06, 03-04-2017 | #8 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Цитата:
Вот вариант
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 Цитата:
|
||
------- Последний раз редактировалось megaloman, 03-04-2017 в 21:27. Отправлено: 21:17, 03-04-2017 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|