1. Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.
    Если у вас возникли проблемы с регистрацией на форуме - то вы можете сообщить об этом с помощью этой формы без авторизации,администрация форума обязательно отреагирует на вашу проблему.
    Скрыть объявление

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.072
    Симпатии:
    4.946
    Здравствуйте, klaster !
    Добро пожаловать на SafeZone !

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

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

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

    Сообщения:
    271
    Симпатии:
    125
    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.072
    Симпатии:
    4.946
    Сергей, вы это вообще о чём?

    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.072
    Симпатии:
    4.946
    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.072
    Симпатии:
    4.946
    Ничего не понял.
    PROGRAM.EXE запускает STARTER.BAT, который запускает PROGRAM.EXE, который по идее опять запускает STARTER.BAT.
    Какая-то рекурсия )))
    --- Объединённое сообщение, 20 июл 2017 ---
    Это же и делает мой бат. Или нет?
    Ну, да, у меня ещё запускаются вспомогательные копии батника для слежения за каждым запущенным процессом, или это проблема?
     
    Последнее редактирование: 20 июл 2017
  10. klaster
    Оффлайн

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Команда call bat.bat
     
  16. klaster
    Оффлайн

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

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

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

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

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

    Сообщения:
    9
    Симпатии:
    0
    УРА! Заработало!
    В Ваш батник добавил строки из своего батника, поменял SetProcName на свою программу и все заработало так, как и нужно!
     
    Последнее редактирование: 20 июл 2017

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