Как закрыть окно исполняемого файла, запущенного из CMD, без использования TASKILL [BATCH] - PullRequest
3 голосов
/ 02 августа 2020

Я создал базовый c BAT-скрипт для загрузки обновлений из вирусной базы Avast, а затем их применения, запустив загруженный файл.

@ECHO OFF

set downloadFolder=C:\Users\myuser\Downloads\Avast_updates

set downloadUrl=https://install.avcdn.net/vps18/vpsupd.exe

bitsadmin /transfer myAvastUpdates /download /priority normal ^
  "%downloadUrl%" "%downloadFolder%\vpsupd.exe" 

start /min "Update..." "%downloadFolder%\vpsupd.exe"

exit

Кроме того, я создал задачу Windows для запускать BAT каждые x часов.

Все работает правильно, но я хочу знать, есть ли способ автоматически закрыть окно исполняемого файла после завершения процесса обновления.

введите описание изображения здесь

Мне пришло в голову использовать TASKILL через x секунд, но это не уверяет меня, что процесс обновления завершился за x секунд, иногда это может занять больше времени, а иногда меньше, плюс я не Я не хочу использовать эту команду в установщике безопасности программы.

Тогда мне пришло в голову послать «Enter» через WshShell.SendKeys:

set SendKeys=CScript //nologo //E:JScript "%~F0"
cls
timeout /t 5 >nul
%SendKeys% "{ENTER}"

@end

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

Но это не сработало, потому что это окно не закрывается с помощью «Enter» или «ALT F4», оно закрывается, только если мы нажимаем «Готово» или крестик «x», чтобы закрыть окно (если бы это сработало, у него возникла бы проблема с повторной установкой времени ).

Есть ли способ автоматически закрыть это окно после завершения процесса обновления?

Ответы [ 2 ]

8 голосов
/ 02 августа 2020

vpsupd.exe поддерживает переключатель /silent для подавления взаимодействия с пользователем.

start /min не требуется, поскольку он просто открывает другое окно cmd, которое, в свою очередь, запускает исполняемый файл. Так что просто сделайте:

vpsupd.exe /silent
0 голосов
/ 02 августа 2020

С помощью @Stephan и @Gerhard код для загрузки и обновления Avast был таким:

@ECHO OFF

set "downloadFolder=%userprofile%\Downloads\avast_updates"
set "downloadUrl=https://install.avcdn.net/vps18/vpsupd.exe"
 bitsadmin /transfer myAvastUpdates /download /priority normal ^
 "%downloadUrl%" "%downloadFolder%\vpsupd.exe" 

"%downloadFolder%\vpsupd.exe" /silent

exit
...