BAT для запуска второй копии EXEфайла и закрытия первой копии

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем klaster, 19 июл 2017.

  1. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Добрый день!
    Помогите, пожалуйста, с BAT файлом.

    Запускаем BAT файл, который:
    1) запускает программу PROGRAM.EXE
    2) ждет 90 секунд
    3) запускает вторую копию программы PROGRAM.EXE;
    4) ждет 10 секунд;
    5) закрывает первую копию PROGRAM.EXE;
    6) ждет 80 секунд;
    7) открывает третью копию PROGRAM.EXE;
    8) ждет 10 секунд;
    9) закрывает вторую копию PROGRAM.EXE;
    10) ждет 80 секунд;
    11) открывает четвертую копию PROGRAM.EXE;
    и.т.д.
    Должен исполняться бесконечный цикл.
    Если не сложно (но не обязательно), желательно в окне видеть количество итераций.

    Спасибо!
     
  2. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    Здравствуйте, klaster !
    Добро пожаловать на SafeZone !

    А по какому правилу действует этот цикл:
    1. Запуск нового экземпляра каждые 90 секунд
    +
    2. Завершение каждого процесса по завершению 100 секунд длительности его работы

    Правильно ли я понял? Или ещё какое-то условие?
     
  3. Сергей

    Сергей Активный пользователь

    Сообщения:
    288
    Симпатии:
    143
    PROGRAM.EXE сама себя вести так не может? (не Ваша). А если батник переименовывает PROGRAM.EXE в PROGRAM_1.EXE, запускает, переименовывает обратно в PROGRAM.EXE.... А выключение будет делать соответственно для процессов PROGRAM_1.EXE, PROGRAM_2.EXE...
     
  4. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Добрый день!
    Один рисунок (схема) вместо тысячи слов. Возможно, в первом посте я некорректно сформулировал вопрос. Пожалуйста, смотрите в приложенном файле схему работы.
    PROGRAM.EXE поменять я не могу.
     

    Вложения:

    • program.exe.pdf
      Размер файла:
      113,9 КБ
      Просмотров:
      8
  5. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    Сергей, вы это вообще о чём?

    klaster, однозначно неверно. Тайминги в 1-м посте не совпадают с приложенной схемой.
    Получается:
    1. Запуск нового экземпляра каждые 80 секунд.
    2. Длительно работы процесса - 90 секунд.

    Код (DOS):
    @echo off
    SetLocal EnableExtensions

    Set Duration=90
    Set Step=80
    Set ProcName=calc.exe

    if "%~1" neq "" goto Worker
    :begin
    set /a n+=1
    start "" /min cmd /c "%~fs0" %n%
    echo Started Worker # %n%
    timeout /T %Step%
    goto begin

    :Worker
    title Worker %1
    for /f "tokens=1-2 delims=," %%a in ('tasklist /NH /FO:CSV') do if /i "%%~a"=="%ProcName%" set PID.%%~b=true
    start "" /min "%ProcName%"
    for /f "tokens=1-2 delims=," %%a in ('tasklist /NH /FO:CSV') do if /i "%%~a"=="%ProcName%" if not defined PID.%%~b set PID=%%~b
    timeout /T %Duration%
    taskkill /F /PID %PID%
    Замените calc.exe на свою программу. Путь к программе в переменной указывать НЕЛЬЗЯ.
    Совместимость: Vista+.
     
  6. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Dragokas, запустил без изменений с calc.exe. Тайминги верные (да их и в переменных можно менять), но сами окна калькулятора не закрываются после 90 секунд работы. Можно подправить, чтобы они закрывались?
     
  7. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    klaster, скорее всего вы запускаете код на системе Windows 8 или выше, а там calc.exe - это ланчер для процесса calculator.exe. Естественно, код об этом не знает и пытается закрыть calc.exe, которого уже не существует в списке процессов. В качестве ProcName нельзя указывать ланчер. Попробуйте заменить на notepad.exe, увидите, что работает нормально.
     
  8. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Dragokas, моё почтение, все именно так, как Вы написали, с PROGRAM.EXE под моим WIN10 работает как часы!
    К сожалению, только что понял, что с самого начала неправильно описал проблему.

    PROGRAM.EXE запускает готовый .BAT файл который после запуска PROGRAM.EXE закрывается (назовём его STARTER.BAT, он у меня есть). Тайминги работы PROGRAMM.EXE как в моей схеме выше.
    Т.е. порядок работы такой:
    1. 0sec - STARTER.BAT запускает PROGRAM.EXE(1), после этого окно STARTER.BAT само закрывается.
    2. 80sec - STARTER.BAT запускает PROGRAM.EXE(2), после этого окно STARTER.BAT само закрывается.
    3. 90sec - PROGRAM.EXE(1) закрывается.
    4. 160sec - STARTER.BAT запускает PROGRAM.EXE(3), после этого окно STARTER.BAT само закрывается.
    5. 170sec - PROGRAM.EXE(2) закрывается.
    6. 240sec - STARTER.BAT запускает PROGRAM.EXE(4), после этого окно STARTER.BAT само закрывается.
    7. 250sec - PROGRAM.EXE(3) закрывается.
    8. итд.
    Есть ли возможность переписать программу под этот алгоритм?
    Еще раз очень извиняюсь!
     
  9. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    Ничего не понял.
    PROGRAM.EXE запускает STARTER.BAT, который запускает PROGRAM.EXE, который по идее опять запускает STARTER.BAT.
    Какая-то рекурсия )))
    Это же и делает мой бат. Или нет?
    Ну, да, у меня ещё запускаются вспомогательные копии батника для слежения за каждым запущенным процессом, или это проблема?
     
    Последнее редактирование: 20 июл 2017
  10. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Такой у меня русский!
    STARTER.BAT запускает PROGRAM.EXE, после этого STARTER.BAT закрывается.
     
  11. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    Стоп, а если
    то кто будет следить за запущенным процессом и закрывать его через 90 секунд, и запускать все остальные процессы?
     
  12. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Хм, как-же написать...
    Первым идет STARTER.BAT, он запускает PROGRAM.EXE, после чего STARTER.BAT закрывается.
    это должен делать новый BAT файл, который я без Вас написать не смогу.
     
  13. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    А, я кажется понял. Сумасшедшая схема работы :Biggrin::Biggrin::Biggrin:
    Зачем это всё нужно, если не секрет?
    Сейчас попробую переписать.
     
  14. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Между Вашим батником и моей программой должен быть мой батник, который и запускает программу. Получается, что ваш батник должен запустить (запускает) мой батник (который после вызова программы сам закроется), а после 90 секунд ваш батник должен закрыть программу.
     
  15. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    Не обижайтесь, я просто тут уже ржу от смеха, то ли потому что не могу понять схему, то ли потому что она сложнее, чем можно было бы сделать.

    Ладно, если всё так, как вы пишете (т.е. в итоге, не программа запускает батник, а ваш батник запускает программу), то почему бы вам просто не добавить вызов вашего батника вместо вот этой строки:
    Код (Text):

    start "" /min "%ProcName%"
     
    моего батника?

    Команда call bat.bat
     
  16. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    Проверил. Все работает кроме того, что по прошествию 90 секунд не закрывается окно.
     
  17. Dragokas

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    5.337
    Симпатии:
    5.242
    klaster,
    1. Ваш батник вызывается через call ?
    2. Прототип команды запуска программы точно такой же как у меня?
    3. Ваш батник возвращает управление? (должен заканчиваться на exit /b, goto :eof, или ничем, но не Exit)
     
  18. klaster

    klaster Новый пользователь

    Сообщения:
    9
    Симпатии:
    0
    УРА! Заработало!
    В Ваш батник добавил строки из своего батника, поменял SetProcName на свою программу и все заработало так, как и нужно!
     
    Последнее редактирование: 20 июл 2017
Загрузка...
Похожие темы - запуска второй копии
  1. Guest
    Ответов:
    4
    Просмотров:
    213
  2. Victoreva
    Ответов:
    12
    Просмотров:
    2.338

Поделиться этой страницей

Загрузка...