CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Ответить
 • Просмотры: 1
Аватара пользователя
vk_k14m@vk

CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение vk_k14m@vk »

Использую подобный скрипт:



Код:

Код: Выделить всё

@ECHO OFF
START "" Program.exe
ping 127.0.0.1 -n 15 >nul
START "" Program2.exe

Тоесть когда я запускаю скрипт, то он сразу запускает приложение Program.exe, после чего через 15 секунд запускает "вспомогательное" приложение Program2.exe. Далее нужно сделать, что б после выключения приложения Program.exe скрипт автоматически, через 15 секунд выключал и "вспомогательное" приложение Program2.exe.



И еще, если можно. Нужно сделать что б этот скрипт как-то скрывался. Сворачивался в трей или еще чего. Что б окно командной строки не маячило перед глазами.
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение YuS_2 »

Цитата vk_k14m@vk:



через 15 секунд выключал и "вспомогательное" приложение Program2.exe.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Выключал - громко сказано. Всё что умеет чистый cmd - "убивать" приложения командой taskkill. Если устроит - это организовать несложно.

Что-то другое, т.е. для корректного завершение работы, а также для скрытия окна CMD - как минимум, понадобится WSH, powershell или внешние приложения...
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение YuS_2 »

Цитата vk_k14m@vk:



Что[]б окно командной строки не маячило перед глазами.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Делайте не пакетный файл, а VB-скрипт. Им же организуете и убиение процесса через заданное время.

И тогда никаких пингов — а штатная директива Sleep, не отнимающая у системы лишнее время на обработку.
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение YuS_2 »

Цитата YuS_2:



Всё что умеет чистый cmd - "убивать" приложения командой taskkill.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Вообще-то, нет: именно taskkill.exe (без использования параметра /f) делает попытку закрытия главного окна приложения (путём отсылки сообщения). WSH этого не умеет (в Вашей трактовке — умеет только «убивать» процесс).
Аватара пользователя
mwz

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение mwz »

Цитата mwz:



Делайте не пакетный файл, а VB-скрипт. Им же организуете и убиение процесса через заданное время.

И тогда никаких пингов — а штатная директива Sleep, не отнимающая у системы лишнее время на обработку.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Мне не нужно убиение процесса через заданное время. Мне нужно убиение второго процесса когда первый процесс завершается. Так как этот процесс может длится 20 минут, а может 6 часов. Время его работы не фиксировано. Грубо говоря, когда я закрываю первое приложение, второе тоже должно закрыться. Не важно каким способом.




Цитата mwz:



Делайте не пакетный файл, а VB-скрипт. Им же организуете и убиение процесса через заданное время.

И тогда никаких пингов — а штатная директива Sleep, не отнимающая у системы лишнее время на обработку.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Я без понятия что такое VB-скрипт.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение Iska »

Цитата vk_k14m@vk:



Мне нужно убиение второго процесса когда первый процесс завершается
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Это можно сделать, добавив параметр /wait к старту первой программы, но тогда, скорее всего, придется запускать вторую программу предварительно дополнительным батником со своим таймером)))
Аватара пользователя
vk_k14m@vk

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение vk_k14m@vk »

Цитата gannet:



Это можно сделать, добавив параметр /wait к старту первой программы, но тогда, скорее всего, придется запускать вторую программу предварительно дополнительным батником со своим таймером)))
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Я знаю что так можно сделать. Но такой вариант мне не подходит.



Можно вообще вручную запускать обе программы а потом вручную обе закрывать.
Аватара пользователя
gannet

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение gannet »

Цитата Iska:



именно taskkill.exe (без использования параметра /f) делает попытку закрытия главного окна приложения (путём отсылки сообщения).
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Верно, это я перепутал с mortscript-ом, там kill именно kill... давно не пользовался... Изображение


Цитата Iska:



WSH этого не умеет
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Хмм, почему-то думал, что там есть CloseMainWindow()...

Ну, тогда powershell поможет...




Цитата vk_k14m@vk:



Я знаю что так можно сделать. Но такой вариант мне не подходит.
CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)




Тогда зациклить мониторинг наличия процесса через каждые 15 сек и закрывать вторую программу, если первая не обнаруживается. Но батник будет резидентом, т.е. постоянно находиться в памяти, до закрытия второго процесса.
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении другого (.exe)

Сообщение YuS_2 »

vbs

[spoiler]Код:
[/spoiler]

Код: Выделить всё

PrgDir1 = "D:\Games\Marriage V2.3"
PrgExe1 = "marriage.exe"
PrgDir2 = "D:\Games\BUBBLES3"
PrgExe2 = "BS3.EXE"
Paus = 15   'Пауза сек
Set WMI = GetObject("winMgmts:")
Set WShell = CreateObject("WScript.Shell")
' Если PrgExe1 запущен, убъем его
Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + PrgExe1 + """")
For Each Process In Processes
    Process.Terminate
Next
' Запустим PrgExe1
WShell.CurrentDirectory = PrgDir1
R1 = WShell.Run(PrgExe1, 7, False)
WScript.Sleep Paus * 1000
' Если PrgExe1 запустилась, запустим PrgExe2
Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + PrgExe1 + """")
If Processes.Count > 0 Then
    WShell.CurrentDirectory = PrgDir2
    R2 = WShell.Run(PrgExe2, 7, False)
Else
    WScript.Quit 1
End If
' Опрашиваем. Если нет PrgExe1 убъем PrgExe2 и завершим скрипт
Do
    WScript.Sleep Paus * 1000
    Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + PrgExe1 + """")
    If Processes.Count = 0 Then
        Set Processes = WMI.ExecQuery("Select *From Win32_Process Where Name=" + """" + PrgExe2 + """")
        For Each Process In Processes
            Process.Terminate
        Next
        Exit Do
    End If
Loop
MsgBox "Нет " + PrgExe1 + " и " + PrgExe2 + ".  Скрипт завершен"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»