1

Я ищу программное обеспечение (может быть, как BAT-скрипт), которое могло бы проверить, запущен ли экземпляр программы, перед запуском этой программы. И если программа / скрипт обнаруживает, что программа не запущена, она должна запустить эту программу, иначе она не должна ничего делать.

Примечание. Программа, которую я собираюсь запустить (uTorrent), не имеет функции обнаружения, чтобы проверить, запущен ли уже сам экземпляр, перед тем, как запускать саму себя.

Я спрашиваю об этом, потому что в настоящее время я использую программное обеспечение (Networx), которое запускает uTorrent, если обнаруживает, что пропускная способность моего интернет-соединения не используется в течение некоторого времени (в моем случае я установил его для запуска uTorrent, если он обнаружит, что 50 КБ или меньше был загружен и загружен в течение 5 минут).

Тем не менее, он не имеет возможности проверить, запущена ли программа, прежде чем вызывать ее. Если он запускает uTorrent, когда uTorrent уже запущен, окно uTorrent переходит в переднюю часть экрана, скрывая фокус окна, что может отвлекать, если вы работаете с окном и не хотите, чтобы другое окно выходило в переднюю часть экрана.

Аргумент uTorrent /MINIMIZED работает правильно, только если uTorrent еще не запущен.

Или кто-нибудь знает о другом программном обеспечении, которое может делать то же, что и программное обеспечение, которое я сейчас использую, за исключением того, что оно проверит, запущен ли uTorrent, прежде чем вызывать его?

Редактировать: я хотел бы добавить, что это предпочтительно, если программное обеспечение / сценарий выполняется свернутым или скрытым, а не перейти на передний план или украсть фокус окна. Кроме того, программное обеспечение или сценарий BAT предпочтительно должны завершиться самостоятельно после выполнения своей задачи.

2 ответа2

3

Может быть, как-то так?

tasklist | find "programname.exe"
if errorlevel 1 c:\path\to\programname.exe
1

Это почти наверняка возможно сделать в пакетном файле, но (как и все нетривиальные) это будет непросто.

Однако PowerShell делает это легко:

if (-not (Get-Proceess "Name")) {
  #run new instance here
}

где Name заменяется именем процесса (обычно это имя файла без .exe).

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