2016-12-17 2 views
1

Я использую PowerShell совместно с Livestreamer (и его новым партнером Streamlink) для передачи из разных служб в зависимости от того, что передается. Сценарий, который я произвел, отлично работает; единственная проблема заключается в том, что закрытие окна PowerShell, когда я хочу прекратить просмотр потока, часто приводит к запуску как Livestreamer, так и моего медиа-плеера, заставляя меня выйти из них в определенном порядке (так как сценарий в противном случае).Команда запуска при завершении/закрытии окна

Немного больше информации о Livestreamer: Это инструмент, используемый для связи с потоковых услуг, как разнообразны друг от друга, YouTube и Twitch.tv. Он фиксирует вывод (обычно RTMP) и передает его на медиаплеер вместо того, чтобы заставлять пользователя полагаться на технологии в Интернете. Сценарий, который я написал, по существу является «оберткой» для Livestreamer, который проверяет внешний JSON, чтобы гарантировать, что поток онлайн, а затем запускает Livestreamer. Livestreamer закроет один раз поток останавливается, который пойман скриптом; сценарий затем перебирает обратно в «онлайн-чек» и начинается с начала. Это так сценарий может быть оставлен; это также означает, однако, что, как только программа Livestreamer закрыта, сценарий рассматривает ее как поток , переходящий в автономный режим и снова повторяющийся. По этой причине я хотел бы, чтобы сценарий мешал работе Livestreamer как можно физически. На странице руководства для Livestreamer говорится, что он пытается закрыть медиаплееров, когда сама программа завершается, но эта функциональность довольно ненадежна.

Лучший способ для меня исправить это было бы уловить закрытие окна консоли PowerShell и выполнить команду в ответ. Я исследовал trap команду PowerShell, но обнаружил, что хочет по сравнению с Unix (в документации скудное) - Я не считаю, что следующий псевдокод имеет какой-либо реальной жизни двойника:

trap [System.Management.WindowClosed] 
    {taskkill /f /im iris.exe; exit} 

Я боюсь, моя задача усложняется несколько по зависимость от сторонних программ, в отличие от внутренних функций PowerShell, и мое желание уловить , в частности кнопку «X», в отличие от CTRL + C.

ответ

3

Использование Register-EngineEvent для регистрации действий для запуска при выходе из оболочки:

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action { 
    Stop-Process iris -force 
} 
+0

Это работает очень хорошо, но только для CTRL + C. Есть ли способ заставить его работать для закрытия окна с помощью кнопки X или мне повезло? – seagull

+0

Вам понадобится дополнительный скрипт, который проверяет, работает ли основной. – wOxxOm

Смежные вопросы