1

Мне нужно запустить задачу в планировщике задач Windows 2003, однако команда должна получить доступ к переменным среды:

vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}

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

Кто-то может поспорить, что это может быть достигнуто с помощью префикса CMD /C, позволяющего запускать команду из командной строки, однако, поскольку задача должна быть принудительно завершена через некоторое время, cmd.exe будет завершен вместо вызванного команда (в данном случае vlc.exe).

Любой намек, как запустить команду без использования пакетного файла или командной строки, при этом правильно наследуя переменные среды?

1 ответ1

0

Попробуй это

cmd /c start "" vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}

Вы можете убить VLC с чем-то вроде

taskkill /fi "imagename eq vlc.exe"

РЕДАКТИРОВАТЬ - Теперь, когда я полностью понимаю вашу дилемму:

Я почти уверен, что не существует простого решения, которое дает вам доступ к переменным окружения, а также позволяет планировщику задач уничтожать vlc по прошествии времени. Ваша программа ничего не знает о расширении переменных среды, поэтому это должно произойти до vlc.exe . Это работа cmd.exe . К сожалению, в Windows нет настоящих дочерних процессов, поэтому, если вы запускаете vlc.exe через cmd.exe , то при планировщике задач убивает cmd.exe , процесс vlc.exe остается.

Я полагаю, вам придется написать скрипт, который запускает vlc.exe , помня PID. Затем скрипт будет ждать заданное вами количество времени, а затем уничтожит vlc. Планировщик задач может запустить ваш скрипт.

Я полагаю, что вы можете делать то, что вы хотите, с помощью пакетного скрипта в Windows 2003, в зависимости от того, какие инструменты (команды) доступны в этой версии Windows.

TIMEOUT может использоваться для введения задержки. Например, подождать 1 минуту:

timeout 60 /nobreak >nul

WMIC может использоваться для запуска процесса и возврата PID. См. Windows CMD Shell »Запустите процесс и получите его PID. Я думаю, что сложная часть будет передавать приведенные аргументы, но это может быть сделано. Прочитайте всю ветку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .