Windows как проверить запущена ли программа и если нет то запустить ее

Как проверить, работает ли приложение из пакетного файла (cmd)? Мне не нужно запускать другой экземпляр, если программа уже запущена. (Я не могу изменить приложение, чтобы сделать его единственным экземпляром.) Также приложение может работать как любой пользователь.

Matt Lacey 02 окт. 2008, в 13:37
Поделиться
Возможно дублирование пакетной программы, чтобы проверить, существует ли процесс
phuclv 29 нояб. 2016, в 08:27
дубликат вопроса, заданного пять лет спустя?
Matt Lacey 06 дек. 2016, в 21:34
Cardinal System 01 апр. 2017, в 18:00
phuclv 02 апр.

2017, в 01:32
Cardinal System 02 апр. 2017, в 02:41
phuclv 02 апр. 2017, в 07:53
oopsdazie 18 май 2017, в 13:58
phuclv 18 май 2017, в 14:38
Показать ещё 6 комментариев

Поделиться:
command-line

17 ответов

Еще одна возможность, с которой я столкнулся, с помощью grep:

tasklist /FI «IMAGENAME eq myapp.exe» 2>NUL | find /I /N «myapp.exe»>NUL if «%ERRORLEVEL%»==»0» echo Program is running

Не нужно сохранять дополнительный файл, поэтому я предпочитаю этот метод.

Как исправить ошибку «Пожалуйста отключите Hyper-V» при запуске эмуляторов | BlueStacks, Memu и др.

Chaosmaster 25 авг. 2009, в 17:45
Поделиться

это работало для меня хорошо (Windows XP SP3). ИМХО, это самый элегантный способ из всех предложенных здесь, используя только инструменты, поставляемые с окнами

hello_earth 08 июль 2010, в 15:30

У меня была проблема с синтаксисом этой командной строки. Я изменил его на tasklist /FI «IMAGENAME eq winword.exe» 2>NUL | find /I /N «winword.exe»>NUL / if %ERRORLEVEL%==1 goto wordnotrunning к if %ERRORLEVEL%==1 goto wordnotrunning , чтобы заставить его работать (подозревая кавычку вокруг частей if

Steve B 19 окт. 2011, в 07:17
У меня работает на Windows Server 2003! 🙂
Enrico 05 июль 2012, в 13:36

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

Mowgli 15 сен. 2012, в 21:47

Пожалуйста, помните, что в других языковых версиях XP имена фильтров переводились в коде, но не в справке /? экран. Так, например, IMAGENAME в польской версии — NAZWA_OBRAZU .

rsk82 30 нояб. 2012, в 15:44

Под Win7 мне пришлось изменить его на tasklist /FI «IMAGENAME eq myapp.exe» /NH | find /I /N «myapp.exe» >NUL Первый NUL кажется ненужным, я понятия не имею, для чего используется ‘2’, / NH является необязательным.

Jan Doggen 08 нояб. 2013, в 09:17

список задач всегда выходит со статусом 0, независимо от того, находит ли он какие-либо подходящие задачи, поэтому он сам по себе бесполезен. Поскольку вы все равно должны использовать find (или findstr) для проверки его вывода, нет смысла использовать фильтры списка задач. Просто сделай список задач | найти «myprog.exe»> nul: goto foundit или somesuch. Вам может понадобиться параметр / v (подробный) для списка задач.

Denis Howe 07 июнь 2014, в 12:32
На самом деле вызов внешнего find.exe можно избежать. Смотрите мою уменьшенную версию поблизости .
TrueY 21 авг. 2014, в 10:21
akavel 08 янв. 2015, в 09:14
как сказал Ян Догген, у меня не получилось. Ответ ниже Мэтта Лейси работал для меня без изменений.
Fractal 18 фев. 2016, в 17:49
mtyson 29 сен.

Как исправить — «Прекращена работа программы» при запуске ИГРЫ

2016, в 22:55

Я понятия не имею почему, но мне пришлось использовать if errorlevel 0 , а не if «%ERRORLEVEL%»==»0» . Как ни странно, использование %ERRORLEVEL% работает cmd.exe , если я выполняю команды непосредственно в cmd.exe , но если я пытаюсь сделать то же самое в сценарии .bat , %ERRORLEVEL% всегда оценивается как ноль. FWIW, скрипт использует setlocal enableextensions ; не уверен, связано ли это с наблюдаемым поведением. Это на Windows 7 x64.

Читайте также:
Как вытащить программы из Windows

Ben Johnson 10 июль 2017, в 15:43

Следует отметить, что если ваше имя задачи слишком длинное, полное имя не будет отображаться в результатах, поэтому вместо этого проверьте противоположное сообщение

drzaus 11 май 2018, в 19:40
Много лишних битов. tasklist | find /i «notepad.exe» > nul более чем достаточно.
Jason 22 март 2019, в 22:57
Показать ещё 12 комментариев

Вот как я это разработал:

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end start notepad.exe :end del search.log

Вышеуказанное откроет Notepad, если оно еще не запущено.

Изменить: обратите внимание, что это не будет искать приложения, скрытые из списка задач. Это будет включать любые запланированные задачи, выполняемые как разные пользователи, поскольку они автоматически скрыты.

Matt Lacey 02 окт. 2008, в 14:00
Поделиться
Это работает для меня, на XP. Больше ничего не проверял.
Matt Lacey 02 окт.

2008, в 13:53

Изменение формата списка задач на CSV или на что угодно, кроме таблицы, важно, потому что это макет (таблица) списка задач по умолчанию усекает длинные имена изображений, что нарушает логику.

kibbled_bits 22 июнь 2011, в 14:56

Это решение не будет работать в Vista, потому что TASKLIST производит некоторые выходные данные, даже если процесс не найден. Я предполагаю, что то же самое верно для Windows 7.

dbenham 28 янв. 2012, в 16:39
Другие решения работают без временного файла.
Denis Howe 10 март 2018, в 11:22

не работает в Windows 10. search.log содержит «INFO: не выполняются задачи, соответствующие указанным критериям». и блокнот не запускается

Sergey 30 май 2018, в 08:21
Показать ещё 3 комментария

Мне нравится решение Chaosmaster! Но я искал решение, которое не запускает другую внешнюю программу (например, find.exe или findstr.exe). Поэтому я добавил идею из решения Matt Lacey, которая создает также предотвращаемый временный файл. В конце я мог найти довольно простое решение, поэтому я поделился им.

SETLOCAL EnableExtensions set EXE=myprog.exe FOR /F %%x IN (‘tasklist /NH /FI «IMAGENAME eq %EXE%»‘) DO IF %%x == %EXE% goto FOUND echo Not running goto FIN :FOUND echo Running :FIN

Это работает для меня красиво.

TrueY 21 авг. 2014, в 10:32
Поделиться
Это решение хорошо работает — проверено в Windows 8.1. Я заметил, что он чувствителен к регистру.
oliver-clare 02 дек.

2014, в 11:18
TrueY 02 дек. 2014, в 12:42
Хорошо работает для меня — проверено в Windows 7 X64
Mr Rubix 15 март 2016, в 18:21
подтвердить сервер 2008 и windows10 работает нормально
CWilson 25 нояб. 2016, в 13:50

Показать ещё 2 комментария

В Windows вы можете использовать инструментарий управления Windows (WMI), чтобы гарантировать, что приложения с указанной командной строкой не запущены, например:

wmic process where (name=»nmake.exe») get commandline | findstr /i /c:»/f load.mak» /c:»/f build.mak» > NUL (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% если у вас его нет, то Only the administrator group members can use WMIC.EXE. затем Reason:Win32 Error: Access is denied.

Jeroen Wiert Pluimers 14 фев. 2012, в 09:48

я думаю, что это лучшее решение, потому что wmic дает вам полную запущенную командную строку и предоставляет другую информацию .

Glavić 23 май 2012, в 15:42

Предложение npocmaka использовать QPROCESS вместо TASKLIST велико, но его ответ настолько большой и сложный, что я чувствую себя обязанным опубликовать довольно упрощенную версию, которая, я думаю, решит проблему большинства неусовершенствованных пользователей:

Читайте также:
Как поменять путь установки программ по умолчанию Windows 10

QPROCESS «myprocess.exe»>NUL IF %ERRORLEVEL% EQU 0 ECHO «Process running»

Приведенный выше код был протестирован в Windows 7 с пользователем с настройками администратора.

aldemarcalazans 11 май 2017, в 19:49
Поделиться

Я просто использовал эту идею, чтобы дважды остановить автоматизированный процесс, и это сработало как шарм!

Davy C 14 март 2018, в 10:23

Я должен сказать, что в отличие от этой команды, решения для списка задач не только выглядят слишком сложными для такого простого запроса, но они также запускают секунду или около того и используют тонны процессора! Это намного лучше, также работает без прав администратора (Windows Server 2012).

Eugene Marin 21 июнь 2018, в 15:36

Ответ TrueY казался самым изящным решением, однако мне пришлось немного поработать, потому что я не понимал, что именно происходит. Позвольте мне прояснить ситуацию, надеюсь, сэкономить некоторое время для следующего человека.

TrueY modified Отвечено:

В любом случае, я надеюсь, что это поможет. Я знаю, что иногда чтение партии/командной строки иногда бывает путаным, если вы новичок, как я.

kayleeFrye_onDeck 24 сен. 2014, в 19:58
Поделиться

Я использую PV.exe из http://www.teamcti.com/pview/prcview.htm, установленный в Program FilesPV с таким пакетным файлом:

Adam 02 дек. 2008, в 19:49
Поделиться

это работает для меня в Windows 7. 2-я строка — это каталог, в котором находится программа, а не сама программа.

Fabio Cionini 16 апр. 2012, в 21:23

Ответ предоставленный Мэттом Лэйси, работает для Windows XP. Однако в Windows Server 2003 строка

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log

INFO: не выполняются задачи, которые соответствуют указанным критериям.

который затем считывается при запуске процесса.

У меня нет кучи опыта работы с пакетными сценариями, поэтому моя мысль заключается в том, чтобы затем искать имя процесса в файле search.log и передавать результаты в другой файл и искать для любого вывода.

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log FINDSTR notepad.exe search.log > found.log FOR /F %%A IN (found.log) DO IF %%~zA EQU 0 GOTO end start notepad.exe :end del search.log del found.log

Я надеюсь, что это поможет кому-то другому.

benmod 10 авг. 2011, в 08:46
Поделиться
Это работает для Win 2008. +1 для Нет запущенных задач, которые соответствуют указанным критериям.
Mangesh Pimpalkar 10 дек.

2014, в 01:04

Мне нравятся инструменты WMIC и TASKLIST , но они недоступны в домашних/основных версиях окон. Другим способом является использование команды QPROCESS , доступной почти на всех машинах Windows (для тех, которые имеют терминальные службы — Я думаю, что только выиграть XP без SP2, так что практически каждый компьютер Windows):

QPROCESS команда не так сильна, как TASKLIST и ограничена отображением всего 12 символов имя процесса, но следует учитывать, если TASKLIST недоступно.

Более простое использование, когда оно использует имя, если процесс как аргумент (суффикс .exe является обязательным в этом случае, когда вы передаете исполняемое имя):

Различие между двумя способами использования QPROCESS заключается в том, что QPROCESS * отобразит все процессы, а QPROCESS some.exe будет фильтровать только процессы для текущего пользователя.

Использование WMI объектов через окна script host exe вместо WMIC также является опцией. Он должен также запускаться на всех машинах Windows (исключая те, где WSH выключен, но это редкий случай). Вот файл bat, который перечисляет все процессы через классы WMI и может использоваться вместо QPROCESS в script выше (это гибрид jscript/bat и должен быть сохранен как .bat ):

Читайте также:
Как запустить на Windows 8 программы Windows 7

И модификация, которая будет проверять, запущен ли процесс:

Эти два параметра можно использовать на машинах без TASKLIST .

Конечная техника использует MSHTA . Это будет работать на всех машинах Windows с XP и выше и не зависит от настроек Windows script. вызов MSHTA может немного снизить производительность (опять же нужно сохранить как bat):

Источник: overcoder.net

Проверить, запущена ли программа

Бывают задачи, когда в командном CMD/BAT файле необходимо проверить, запущено ли какое-то определённое приложение.
Например, командный файл резервного копирования должен дождаться завершения программы, открывшей файлы. Или командный файл должен проверять работу программы и, если она не запущена, запускать её.

Для решения этих задач надо лишь воспользоваться командой tasklist с фильтром по названию приложения.
Проверить, запущено ли приложение Microsoft Outlook (outlook.exe):

Здесь используется скрипт sleep.js, делающий задержку на 1 секунду (1000 мс), см. Как сделать задержку в командном файле.
Аналогично, дождаться завершения программы, чтобы выполнить какие-то действия:

В первом примере мы хотим чтобы при закрытом Outlook он запускался, то по идее дописываем start outlook. А если к примеру нам нужен не оутлук то команда старт будет выглядеть start «Cпуть до файлафайл.exe»
Так команда не сработает, поскольку если посмотреть справку по ней (start /?), то в справке вы увидите следующее:

START [«заголовок»] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE ] [/AFFINITY ] [/WAIT] [/B] [команда/программа] [параметры] Можно пробовать разные варианты с ковычками и без указывать по разному пути но самый надежный и безотказно работающий это cd Cпуть до файла start файл.exe

Готовый вариант батника который проверит запущена ли программа и если она запущена просто прекратит свою работу если программа не запущена, запустит ее

Источник: it-git.ru

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

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

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

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

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

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

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

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

Источник: poweruser.guru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru