Вопрос или проблема
- Я записываю ошибки.
- Некоторые ошибки в моем просмотрщике журналов запускают исполняемый файл.
- Этот исполняемый файл воспроизводит звук.
- Я знаю, что мне нужно посмотреть в мой журнал.
Это отлично работает, пока я не работаю над чем-то, что вдруг хочет вызвать это, скажем, три тысячи раз за 500 мс. Когда это происходит… Скажем так, Windows не предназначен для воспроизведения 3000 экземпляров одного и того же аудиофайла одновременно.
Я использовал Sounder для воспроизведения звуков без отображения любых окон. Это работает отлично, если вы не пытаетесь открыть его 3,000 раз за 500 мс.
Недавно моя работа привела меня к тому, что я столкнулся с глупыми числами ошибок очень быстро. Поэтому я вспомнил, что у меня есть пакетная программа, которая загружает все мои программы (но пропускает те, которые уже открыты). Поэтому я адаптировал это, чтобы загрузить sounder:
C:
SETLOCAL EnableExtensions
set EXE=sounder.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
cd "C:\example"
start sounder.exe "C:\example\potato_timer_01.wav"
goto FIN
:FOUND
echo Sounder уже запущен.
:FIN
Проблема в том, что запуск пакетных файлов теперь открывает окно, чего я не хочу.
Ладно, хорошо… Я провел больше исследований, и кто-то на другой ветке сказал, что запуск скрипта VBS может скрыть окно:
CreateObject("Wscript.Shell").Run "sounder_potato_timer_01.bat", 0, True
Это отлично работает… если я открываю это вручную. Однако моя программа просмотра журналов не может открыть его (я не знаю почему, я ничего не слышу и не получаю никаких сообщений об ошибках или не вижу открывающихся окон). Поэтому я сильно сомневаюсь, что просмотрщик журналов принимает любые типы исполняемых файлов в командной строке.
Да, я пробовал исследовать другие программы, такие как VLC, но, похоже, они не поддерживают выполнение без окон. Я исчерпал варианты и буду благодарен за любые конструктивные предложения по достижению моей цели. Итак, в кратце:
Как запустить bat или exe файл без отображения окна и воспроизводить файл только если другие экземпляры не запущены?
Моя программа для просмотра журналов – Hoo Wintail (у нее есть бесплатная пробная версия). Я готов обновить свой вопрос, чтобы отметить, какие другие типы исполняемых файлов работают, а какие нет. Я также готов попробовать другие программы командной строки, кроме sounder.exe, если у кого-то есть полезная рекомендация.
Пожалуйста, помните, что моя цель – столкнуться с роями ошибок, не делая мой компьютер неработоспособным. Таким образом, я могу определить, что сломано, исправить это и не заставлять других сталкиваться с роями ошибок.
Ответ или решение
Чтобы воспроизвести аудиофайл в Windows без отображения окна и только в том случае, если он еще не воспроизводится, вам потребуется хорошо продуманная конфигурация скрипта и использование правильных инструментов. В этом ответе я опишу стратегии, как вы можете достичь этой цели.
Шаги для успешного воспроизведения аудиофайла
-
Используйте скрипт на VBS:
Для запуска скрипта без отображения окна вам нужно использовать VBScript, который поддерживает фоновый запуск программ. Убедитесь, что ваш командный скрипт (bat-файл) будет запускаться именно через VBScript, чтобы избежать появления окон:Set objShell = CreateObject("Wscript.Shell") objShell.Run "C:\example\sounder_potato_timer_01.bat", 0, False
В этом примере
0
указывает на скрытый режим. Попробуйте обновить ваш bat-файл так, чтобы он проигрывал звук, только если предыдущий экземпляр не запущен. -
Проверка существующих экземпляров:
Ваша логика проверкиtasklist
в bat-файле была правильной. Однако стоит немного расширить вашу логику для более надежного выполнения. Пример:@echo off SETLOCAL EnableExtensions set EXE=sounder.exe ; Проверка, запущен ли уже экземпляр FOR /F "tokens=1" %%a IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO ( if /I "%%a"=="%EXE%" ( echo Sounder is already running. exit /b 0 ) ) ; Если экземпляр не найден, запускаем cd "C:\example" start /B sounder.exe "C:\example\potato_timer_01.wav"
В этом коде
start /B
используется, чтобы запуститьsounder.exe
в фоновом режиме, что может помочь в исключении появления окна. -
Обработка команд из вашей программы просмотра логов:
Убедитесь, что ваша программа для просмотра логов (Hoo Wintail) правильно настроена для выполнения скриптов. Возможна проблема – программа не поддерживает запуск дополнительных файлов или операций ввода вывода. -
Альтернативные инструменты для воспроизведения звука:
Еслиsounder.exe
не подходит под ваши требования, рассмотрите возможность использования других инструментов:- NirCmd: Это небольшой инструмент, который позволяет выполнять различные операции с системными командами. Его можно использовать для воспроизведения звуков без создания окон:
nircmd.exe mediaplay 5000 "C:\example\potato_timer_01.wav"
Здесь,
5000
– это время воспроизведения в миллисекундах.- ffmpeg: Это мощный инструмент для обработки медиаданных, который может быть использован для воспроизведения звуков. Сделайте его частью вашей автоматизации:
start /B ffmpeg -i "C:\example\potato_timer_01.wav" -nodisp -autoexit
Заключение
Следуя указанным выше шагам, вы сможете эффективно воспроизводить звук в Windows, не открывая окон и избегая множества зацикленных воспроизведений. Убедитесь в том, что каждая часть вашего решения проверена и функционирует должным образом в контексте вашей среды. Это улучшит опыт работы с вашими логами и позволит сосредоточиться на устранении ошибок, не отвлекаясь на технические неполадки.