|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe) |
|
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)
|
Старожил Сообщения: 342 |
Использую подобный скрипт:
Тоесть когда я запускаю скрипт, то он сразу запускает приложение Program.exe, после чего через 15 секунд запускает "вспомогательное" приложение Program2.exe. Далее нужно сделать, что б после выключения приложения Program.exe скрипт автоматически, через 15 секунд выключал и "вспомогательное" приложение Program2.exe. И еще, если можно. Нужно сделать что б этот скрипт как-то скрывался. Сворачивался в трей или еще чего. Что б окно командной строки не маячило перед глазами. |
|
------- Отправлено: 10:33, 03-06-2018 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
run.bat @echo off start "" "program.exe" :loop >nul timeout /t 15 tasklist /fi "imagename eq program2.exe"|>nul find /i "program2.exe"||start "" "program2.exe" tasklist /fi "imagename eq program.exe"|>nul find /i "program.exe"&&goto loop||goto close goto loop :close taskkill /fi "imagename eq program2.exe" hide.vbs Set oTmp=CreateObject("WScript.Shell") for n = 2 to WScript.Arguments.count Args = Args & " " & WScript.Arguments(n-1) next oTmp.Run WScript.Arguments(0) & Args, 0, False и запускаете через него. |
|
------- Отправлено: 18:04, 03-06-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 342
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
И еще. Не понятно что значит "imagename eq program.exe"? Цитата YuS_2:
![]() |
||
------- Последний раз редактировалось vk_k14m@vk, 04-06-2018 в 15:36. Отправлено: 15:21, 04-06-2018 | #12 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
Цитата vk_k14m@vk:
Приведите в соответствие названия процессов и всё будет работать Цитата vk_k14m@vk:
По поводу скрипта hide.vbs: А так: ? |
|||
------- Отправлено: 20:09, 04-06-2018 | #13 |
Старожил Сообщения: 342
|
Профиль | Отправить PM | Цитировать ![]() Как я уже говорил, забейте. Ваши скрипты только сильнее лагают. Буду пользоваться тем что сам собрал и вручную выключать приложения... |
------- Отправлено: 20:35, 04-06-2018 | #14 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать vk_k14m@vk, Итак, как я понимаю Вашу задачу после обсуждения непоняток:
vbs
1. Запускается первая программа PrgExe1 которая запускает процесс Prc1 2. Запускается вторая программа PrgExe2 которая запускает процесс Prc2 3. Пауза. Отслеживается наличие Prc1. 4. Если Prc1 отсутствует, убиваем Prc2. Завершаем скрипт. 5. Иначе возвращаемся на 3. PrgDir1 = "D:\Program Files\MTA Province" ' Папка с первой программой PrgExe1 = "MTA\MTA.exe" ' Exe-файл первой программы Prc1 = "proxy_sa.exe" ' Процесс запущенный первой программой PrgDir2 = "C:\Program Files (x86)\Bandicam" ' Папка со второй программой PrgExe2 = "Loader.exe" ' Exe-файл второй программы Prc2 = "bdcam.exe" ' Процесс запущенный второй программой Paus = 15 'Пауза сек Set WMI = GetObject("winMgmts:") Set WShell = CreateObject("WScript.Shell") ' Если Prс1 запущен, убъем его Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") For Each Process In Processes Process.Terminate Next ' Запустим PrgExe1 WShell.CurrentDirectory = PrgDir1 R1 = WShell.Run("""" + PrgDir1 + "\" + PrgExe1 + """", 7, False) WScript.Sleep Paus * 1000 ' Если Prс1 запустилась, запустим PrgExe2 Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") If Processes.Count > 0 Then WShell.CurrentDirectory = PrgDir2 R2 = WShell.Run("""" + PrgDir2 + "\" + PrgExe2 + """", 7, False) Else Msg = "Текущая папка" + vbCrLf + WShell.CurrentDirectory + vbCrLf + vbCrLf MsgBox Msg + "Запуск" + vbCrLf + """" + PrgDir1 + "\" + PrgExe1 + """" + vbCrLf + "не запустил процесс" + vbCrLf + """" + Prc1 + """" WScript.Quit 1 End If ' Опрашиваем. Если нет Prс1 убъем Prс2 и завершим скрипт Do WScript.Sleep Paus * 1000 Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") If Processes.Count = 0 Then Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc2 + """") For Each Process In Processes Process.Terminate Next Exit Do End If Loop MsgBox "Нет " + Prc1 + " и " + Prc2 + ". Скрипт завершен" |
------- Последний раз редактировалось megaloman, 05-06-2018 в 17:03. Причина: Доработал под требования заказчика. Добавил аварийное сообщение Отправлено: 22:33, 04-06-2018 | #15 |
Старожил Сообщения: 342
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата:
PrgDir1 = "D:\Program Files\MTA Province" ' Папка с первой программой PrgExe1 = "MTA\MTA.exe" ' Exe-файл первой программы Prc1 = "proxy_sa.exe" ' Процесс запущенный первой программой PrgDir2 = "C:\Program Files (x86)\Bandicam" ' Папка со второй программой PrgExe2 = "Loader.exe" ' Exe-файл второй программы Prc2 = "bdcam.exe" ' Процесс запущенный второй программой Paus = 15 'Пауза сек Set WMI = GetObject("winMgmts:") Set WShell = CreateObject("WScript.Shell") ' Если Prс1 запущен, убъем его Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") For Each Process In Processes Process.Terminate Next ' Запустим PrgExe1 WShell.CurrentDirectory = PrgDir1 R1 = WShell.Run(PrgExe1, 7, False) WScript.Sleep Paus * 1000 ' Если Prс1 запустилась, запустим PrgExe2 Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") If Processes.Count > 0 Then WShell.CurrentDirectory = PrgDir2 R2 = WShell.Run(PrgExe2, 7, False) Else WScript.Quit 1 End If ' Опрашиваем. Если нет Prс1 убъем Prс2 и завершим скрипт Do WScript.Sleep Paus * 1000 Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc1 + """") If Processes.Count = 0 Then Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + Prc2 + """") For Each Process In Processes Process.Terminate Next Exit Do End If Loop MsgBox "Нет " + Prc1 + " и " + Prc2 + ". Скрипт завершен" ![]() |
||
------- Последний раз редактировалось vk_k14m@vk, 04-06-2018 в 23:35. Отправлено: 23:04, 04-06-2018 | #16 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
В общем, если кратко: поместите ярлык, скрипт hide.vbs и пакетник run.bat в один каталог. Предварительно проверьте работу пакетника, он должен работать самостоятельно, а после всех проверок и наладки, запускайте в скрытом режиме. Цитата vk_k14m@vk:
![]() Описывайте подробнее и главное - точнее, условия задачи и тогда получите конфетку, а иначе на выходе будет всегда полуфабрикат, который придется допиливать самостоятельно... и это не претензия, если что, а просто констатация, причем касающаяся не только персонально Вас... это достаточно частое явление. ![]() |
||
------- Отправлено: 23:06, 04-06-2018 | #17 |
Старожил Сообщения: 342
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
------- Отправлено: 23:17, 04-06-2018 | #18 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
Цитата vk_k14m@vk:
![]() @echo off set "prg1=D:\Program Files\MTA Province\MTA\MTA.exe" set "prg2=C:\Program Files (x86)\Bandicam\Loader.exe" set "prc1=proxy_sa.exe" set "prc2=bdcam.exe" start "" "%prg1%" :loop >nul timeout /t 15 tasklist /fi "imagename eq %prc2%"|>nul find /i "%prc2%"||start "" "%prg2%" tasklist /fi "imagename eq %prc1%"|>nul find /i "%prc1%"&&goto loop||goto close goto loop :close taskkill /fi "imagename eq %prc2%" Затем в ярлыке укажите абсолютные пути к самому hide.vbs и run.bat wscript.exe //nologo "D:\здесь путь к папке где он находится\hide.vbs" "E:\здесь путь к папке где он находится\run.bat" PS На всякий случай: "батник" сохраняйте в кодировке 866, скрипт vbs в кодировке 1251... для исключения проблем с кириллицей в путях... |
||
------- Отправлено: 23:37, 04-06-2018 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
![]() Цитата megaloman:
Цитата YuS_2:
|
|||
Отправлено: 23:56, 04-06-2018 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - как дождать завершения одного процесса для начала другого? | ruslaw | Скриптовые языки администрирования Windows | 6 | 17-01-2018 12:00 | |
Разное - как создать exe для запуска другого exe с параметрами, из той же папки | vzli_izv | Программирование и базы данных | 12 | 08-06-2013 14:49 | |
VBS/WSH/JS - Скрипт VBS для запуска .bat-файла при выключении компьютера(сценарий) | W1nn1ep00h | Скриптовые языки администрирования Windows | 2 | 16-05-2013 16:31 | |
CMD/BAT - [решено] bat скрипт - инсталятор модулей для одного java приложения | bombording | Скриптовые языки администрирования Windows | 2 | 08-06-2009 15:33 | |
Ошибка при выключении другого компьютера | Irvix | Microsoft Windows 95/98/Me (архив) | 1 | 25-03-2003 08:38 |
|