Планировщик задач Windows и RB

diehard

Member
Здравствуйте,

сразу скажу - чисто технический вопрос - из серии how to

В силу необходимости я запускаю дополнительный инстанс программы ровно на сутки при помощи системного планировщика задач. Этот же планировщик спустя всё те же сутки - по задумке должен загасить программу (вплоть до следующего запуска согласно графика). Однако программа стоически борется за своё выживание 😂 После того как виндовый планировщик её снимает, спустя секунду прога снова запускается. Нужно отметить, что в настройках стоит галка на опции "Перезапускать в случае зависания" (ну или как она там правильно называется).

А теперь, собсна, вопрос. Поможет ли решению вопроса снятие упомянутой галки? И нет ли в этом других рисков? Или есть какие-то другие способы "умертвить" программу программным (не ручным) путём?

Заранее благодарен!
 
А теперь, собсна, вопрос. Поможет ли решению вопроса снятие упомянутой галки? И нет ли в этом других рисков? Или есть какие-то другие способы "умертвить" программу программным (не ручным) путём?
Опция работает и делает то, что должна - перезапускает программу в случае проблем. И самая большая проблема здесь - некорректное завершение RadioBOSS (похоже, ваш планировщик просто вызывает что-то вроде TerminateProcess). В этом случае очень высока вероятность потери данных, что что-то не сохранится, повреждение файла БД SQLite и что еще угодно.

Снятие опции поможет избежать перезапуска, но все риски, связянные с тем, что программа завершается некорректно, сохранятся.
 
Опция работает и делает то, что должна - перезапускает программу в случае проблем. И самая большая проблема здесь - некорректное завершение RadioBOSS (похоже, ваш планировщик просто вызывает что-то вроде TerminateProcess). В этом случае очень высока вероятность потери данных, что что-то не сохранится, повреждение файла БД SQLite и что еще угодно.

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

Я так понимаю человека интересует наличие каких-то не задокументированных параметров командной строки , чтоб вызвать вроде
radioboss.exe /close и т.п., для корректного завершения РБ
 
Я так понимаю человека интересует наличие каких-то не задокументированных параметров командной строки , чтоб вызвать вроде
radioboss.exe /close и т.п., для корректного завершения РБ
Для этого не нужен параметр, можно послать главному окну WM_CLOSE, или проще - использовать команду (она доступна в Windows) taskkill. В RadioBOSS нужно отключить подтверждение при закрытии (Настройки-Общие).
 
ваш планировщик
Планировщик не "мой", а абсолютно стандартный, системный taskschd.msc, в котором использована опция прекратить выполнение запущенной программы спустя сутки. И судя по поведению программы там действительно посылается сигнал TerminateProcess, потому что после TaskKill программа не перезапускается.

В этом месте возникает некая (возможно мнимая) сложность. Я не могу использовать taskkill /IM radioboss.exe, потому что он прихлопнет все инстансы. А значит нужно либо переименовать экзешник, например в rb.exe, чтобы его имя в списке процессов отличалось от стандартного и уже тогда запускать taskkill /IM rb.exe. Либо же получить способ устойчивого установления PID'а программы, запущенной из конретной локации, чтобы завершать программу по taskkill /PID.

Что вы рекомендуете? Не повлечёт ли переименование конкретного экзешника, в конкретной локации каких-либо сложностей?
 
Что вы рекомендуете? Не повлечёт ли переименование конкретного экзешника, в конкретной локации каких-либо сложностей?
Как минимум, сложность при обновлении, т.к. новая версия опять будет radioboss.exe. В остальном, наверное, можно попробовать.
 
На случай, если вдруг у кого возникнет похожая задача

Создаём два батника. Условный start.bat и stop.bat
Код:
@echo off

rem there is a tab in the file at the end of the line below
set tab=
set cmd=C:\Program Files\RadioBOSS\radioboss.exe
set dir=%~dp0

echo Starting MyProg
set pid=notfound

for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
    `wmic process call create "%cmd%"^, "%dir%"`
) do (
    if %%j gtr 0 (
        set pid=%%j
    )
)

echo %pid% > MyProg.pid
👆 запускает экземпляр программы и записывает в файл MyProg.pid идентификатор запущенного процесса . C:\Program Files\RadioBOSS\radioboss.exe - соответственно нужно заменить на ваш путь.

Код:
@echo off
for /F %%i in (%~dsp0MyProg.pid) do taskkill /PID %%i
del %~dsp0MyProg.pid
👆С этим совсем просто. Он прочитывает сохранённый PID и прибивает нужный экземпляр программы. Его можно точно так же запихнуть либо в системный планировщик либо вовсе в планировщик самой программы - чтобы сама себя прибила.
 
Назад
Верх