Пакетный файл для закрытия программы после открытия второй программы - PullRequest
0 голосов
/ 22 января 2019

У меня есть программа внешнего интерфейса (a.exe), которую я использую для курирования и запуска других программ (в данном примере b.exe).Как только элемент в интерфейсе (a.exe) выбран из списка (b.exe), запускается.Проблема в том, что веб-интерфейс (a.exe) остается открытым, и чтобы закрыть его, я должен вручную выйти из программы, которую он запустил (b.exe), на рабочий стол, чтобы сделать это.

Что я пытаюсь сделатьимеет закрытый веб-интерфейс (a.exe) после выбора элемента в нем (b.exe).Это может быть вызвано двойным щелчком мыши.

Как мне создать пакетный файл для этого?

Программа внешнего интерфейса (a.exe) имеет графический интерфейс.

@echo off
cd "C:\Program Files\a.exe folder"
start a.exe

тогда что?

1 Ответ

0 голосов
/ 26 января 2019

Лучшим решением было бы связаться с автором a.exe и попросить опцию автоматического выхода из a.exe после запуска приложения b.exe как отдельного и отдельного процесса.

Вторым лучшим решением было бы выяснить, какая среда b.exe должна успешно работать, и создать с помощью пакетного файла эту среду и запустить b.exe.

Однако, если два лучших решения по какой-либо причине не возможны, будет полезен следующий код пакетного файла.

@echo off
start "" /D"C:\Program Files\a.exe folder" "a.exe"
set "LoopCount=0"

:Loop
%SystemRoot%\System32\timeout.exe /T 1 /NOBREAK >nul
%SystemRoot%\System32\tasklist.exe /NH | %SystemRoot%\System32\findstr.exe /B /C:"b.exe" /C:"c.exe" /C:"d.exe" >nul
if not errorlevel 1 (
    %SystemRoot%\System32\taskkill.exe /IM "a.exe"
    goto EndBatch
)
%SystemRoot%\System32\tasklist.exe /NH | %SystemRoot%\System32\findstr.exe /B /C:"a.exe"
if errorlevel 1 goto EndBatch
set /A LoopCount+=1
if not %LoopCount% == 60 goto Loop

:EndBatch
set "LoopCount="

Пакетный файл сначала запускается a.exe с каталогом программных файлов, установленным в качестве текущего каталога, а затем запускается как отдельный процесс.

Командный процессор Windows немедленно продолжает выполнение командного файла после запуска a.exe и определяет следующую переменную среды LoopCount со значением 0.

Внутри цикла внешняя команда TIMEOUT доступна, поскольку Windows Vista по умолчанию используется для ожидания одной секунды.

Затем выполняется внешняя команда TASKLIST для вывода всех запущенных процессов без заголовка. Эти выходные данные перенаправляются с помощью | на внешнюю команду FINDSTR , которая ищет с учетом регистра в начале всех строк, выведенных с помощью TASKLIST для одной из строк, указанных с помощью опция /C:. Для поиска без учета регистра дополнительно используйте FINDSTR параметр /I, если вы не знаете, как исполняемые файлы, запускаемые с a.exe, находятся в списке вывода с помощью TASKLIST .

FINDSTR завершается со значением 0, обнаружив хотя бы одну строку, начинающуюся с одной из найденных строк и со значением 1, если ничего не найдено. Вывод FINDSTR не представляет интереса и поэтому перенаправляется на устройство NUL .

Сигнал завершения отправляется внешней командой TASKKILL исполняемому файлу a.exe при обнаружении одного из процессов в списке. a.exe должен завершиться при получении и обработке этого сигнала. В случае, если a.exe игнорирует этот сигнал или он завершается, но перед завершением также запускается приложение, необходимо дополнительно использовать опцию TASKKILL /F, чтобы вызвать реальное уничтожение a.exe процесс в операционной системе Windows. Как правило, параметр /F не следует использовать, поскольку он может привести к повреждению файлов в случае, если приложение, убитое операционной системой, имеет один или несколько файлов, открытых для операций записи.

Но если через одну секунду ни один из процессов, запущенных с помощью a.exe, не будет запущен, пакетный файл проверяет, если все еще работает a.exe. Пакетный файл завершается, если это не так. В противном случае он увеличивает переменную среды LoopCount и сравнивает ее значение с 60 для выхода из пакетного файла после ожидания уже 60 секунд с проверками, чтобы избежать почти бесконечного запуска пакетного файла.

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • findstr /?
  • goto /?
  • if /?
  • set /?
  • start /?
  • taskkill /?
  • tasklist /?
  • timeout /?

См. Также статью Microsoft о Использование операторов перенаправления команд .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...