Bat файл проверка запущена ли программа
Но моя проблема в другом. По словам Заголовка, я хочу постоянно проверять, запущена ли программа. Так что я сделал МОЙ пакетный файл вот так.
Который, кажется, тоже не работает.
И самое сложное из всех, я просто новичок в партии, поэтому я не понимаю большинство вещей здесь
1 ответ 1
Приведенное ниже описание должно работать при необходимости вызывать пакетные сценарии один за другим и в основном просто проверять в памяти на компьютере, с которым выполняется команда TASKLIST для подтверждения его выполнения.
Если он не запущен, вызывайте пакетные сценарии один за другим; в противном случае перейдите к процедуре :B и начните проверку заново. Если он запущен, то выполните ECHO "%MyProcess%" est en cours d^'execution а затем перейдите к процедуре :B и проверьте еще раз для подтверждения (непрерывная проверка).
ВНИМАНИЕ: Убедитесь, что у вас есть GOTO EOF в конце вызываемых пакетных сценариев и НЕ EXIT иначе они не передадут управление вызывающей стороне, чтобы исходный пакет мог продолжить проверку цикла. (см. ниже пример CALLED SCRIPT ПРИМЕР).
СЦЕНАРИЙ, КОТОРЫЙ ИМЕЕТ ПРОВЕРКУ ЛОГИКИ (используйте эту)
(Я предполагаю, что вызываемые пакетные сценарии будут иметь логику для запуска любого процесса, который, как было установлено, НЕ найден работающим в памяти на компьютере, на котором выполняется сценарий abobe, поэтому просто убедитесь, что GOTO EOF - это последнее, что ВСЕ делают. Мне нужно было бы увидеть логику в них, чтобы знать, будет ли это работать нормально или нет, хотя в противном случае.)
ПРИМЕР ВЫЗВАННОГО СКРИПТА (например, 1.bat, 2.bat, 3.bat)
ДРУГИЕ ЗАМЕЧАНИЯ
Вы можете поместить логику в тот же пакетный сценарий, который запускают три отдельных называемых пакетных сценария, и просто вызывать их как метки \ подпрограммы, но мне нужно было бы увидеть логику в них, чтобы убедиться, что она будет работать. Пока у каждого из них есть GOTO EOF внизу, они будут работать одинаково, но таким образом вся логика будет в одном и том же файле пакетного сценария.
Логика пакетного сценария с TASKLIST и FINDSTR как я это понимаю, должна работать без синтаксиса [ /NH /FI imagename eq ], как в примере, который вы показали в своем вопросе. Использование FINDSTR вместо FIND как в вашем примере, также хорошо.
У меня есть логика с пакетным аналогом этому, которая локально и удаленно проверяет процессы, запущенные на серверах, которые либо автоматически исправляют то, что вы делаете, либо отправляют электронное письмо, чтобы указать, что кому-то нужно уделить внимание, поэтому я подтвердил это Метод логики сценария, который я предоставил, работает с успехом. У меня просто нет всей вашей логики для оптимизации, подтверждения и т.д. В противном случае.
Всех приветствую. В интернете не нашёл ответа на свой вопрос.
Очень нужен vbs-скрипт, который будет проверять, запущен ли процесс, а если не запущен, то запускать его.
В принципе, вот пункты, которые важны.
1. Проверка процесса должна происходить раз в 15 минут.
2. Вот строка запускаемого процесса с параметрами:
- Это сейчас прописано в батнике. батник не справляется с перезапуском как нужно.
3. Название проверяемого запущенного процесса: RustDedicated.exe.
Буду крайне благодарен тому, кто разбирается в Visual Basic Script'ах и поможет мне.
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Проверять, запущен ли процесс, а если не запущен, то выполнять действия
Всем привет! Помогите пожалуйста с такой проблемой: пытаюсь создать bat для циклической проверки.
Проверять каждые 2-3 секунды, запущен ли файл 1.wav, если да, то запустить 1.bat
доброго времени суток подскажите пожалуйста как написать BAT CMD или VBScript который будет.
Если процесс не запущен то
Мне нужно чтобы при запуске батника оно искало процесс и если процесс не найден то goto main а если.
Условия в bat файле если запущен процесс
Всем привет! Помогите пожалуйста с такой проблемой: пытаюсь создать bat файл для спящего режима.
разобраться со своим прежде, чем делать выводы никак? Где ваш батник?
Впрочем, не нужен. Приведу элементарный вариант на примере калькулятора:
А в диспетчере задач он есть? ( RustDedicated.exe )
Может оказаться, что проверять нужно совсем другой процесс. разобраться со своим прежде, чем делать выводы никак? Где ваш батник?
game.exe есть тот самый процесс.
Добавлено через 19 секунд
Может оказаться, что проверять нужно совсем другой процесс. Для серверных игр запуск часто происходит через лаунчер, который является только промежуточным процессом.
Пришлите в виде файла.
К find добавить ключик /i
GOTO :LOOP - убрать двоеточие.
Второй строкой дописать:
Команду tasklist ввести в консоль и проверить, работает ли вывод списка процессов вообще (может, у Вас служба WMI отключена).
Добавлено через 3 минуты
И неплохо бы детальнее пояснить вот это, что конкретно происходит.
Пришлите полный релизный батник. Может у Вас там путь для запуска RustDedicated.exe неправильно прописан.
Может у Вас батник лежит рядом с ним, а запуск проихсодит от Админа или с ярлыка, который меняет рабочий каталог. еще миллион причин.
WMI включена (это же Служба Инструментов Windows?).
Сейчас сделаю так, как Вы просите.
Добавлено через 4 минуты
Пришлите полный релизный батник. Может у Вас там путь для запуска RustDedicated.exe неправильно прописан.
Может у Вас батник лежит рядом с ним, а запуск проихсодит от Админа или с ярлыка, который меняет рабочий каталог. еще миллион причин. Я прислал шаблон, который мне на другом форуме составили. И вместо game.exe я подставлял RustDedicated.exe уже на своём компьютере. И параметры я тоже подставлял.
Батник запускает процесс cmd правильно, но в консоли не отображается НИЧЕГО, кроме надписи:
Естественно такой "номер" меня не устраивает, т.к. я должен ведь следить, что происходит в консоли.
А так скрипт точно такой же, что я показал(пути все верные). Клал я батник рядом с exe-файлом. Пытался прописать и полный путь и просто название процесса. Результат один и тот же!
Windows 7 x64. tasklist - системная утилита и от WMI не зависит (список процессов не идет через моникер winmgmts). В общем тему заминаем. Нашёл человека, который платно напишет VBS-скрипт проверки процесса.
Я ещё раз повторяю - БАТНИК МНЕ НЕ НУЖЕН. . госпидя, да в любом VBS-справочнике есть получение списка процессов (работа VBS скрипта в этом случае будет зависеть от WMI). Но хозяин-барин, капса только поменьше. Это к крику приравнивается, а на форуме спокойная обстановка. В общем тему заминаем. Нашёл человека, который платно напишет VBS-скрипт проверки процесса.
Я ещё раз повторяю - БАТНИК МНЕ НЕ НУЖЕН. Батник запускает процесс cmd правильно, но в консоли не отображается НИЧЕГО, кроме надписи: А что там должно отображаться?
Если речь о консоле cmd - то там вообще ничего не должно отображаться. . интересно, после дисейбла в конфигураторе перестал. Будем знать, спасибо Если речь о консоле cmd - то там вообще ничего не должно отображаться. Так вот именно, почему там ничего не должно отображаться?) Как я буду следит за консолью то? Для VBS есть Wscript, который в окно консоли ничего не пишет. Есть другой сервер сценариев - Cscript. Впрочем, вам же платно напишут, смысла обсуждать уже нет. Так вот именно, почему там ничего не должно отображаться?) Как я буду следит за консолью то?
а не в том, что консоль не отображает ход своей работы.
Не отображает ибо ей не даны такие инструкции, а даже наоборот частично спрятаны перенаправлением потока в > nul
Добавлено через 1 минуту
Если автор не против, перенесу тему в раздел Batch.
Все равно здесь уже не планируется кода на VBScript.
Все равно здесь уже не планируется кода на VBScript.
Пока не нужно.
Исполнитель ещё не утверждён. может сольётся ещё.
Батник не работает как нужно.
Поясню.
Это всё нужно для сервера игрового - Rust.
Друг у меня на компьютере поставил сервер.
Проблема в том, что сервер периодически нужно выключать полностью командой с сайта, чтобы этот сервер обновить до актуальной версии.
Мы заметили, что если с сайта слать команду, то сервер то выключается. но батник не стартует его через нужное количество времени.
Поэтому я и решил, что лучшим вариантом будет не неделю париться с батником, а сразу сделать всё на VBS.
Надеюсь, я теперь ясно пояснил? Я уже даже разжевал.
Добавлено через 17 часов 32 минуты
Тему можно закрывать. Скрипт написан.
Как я могу проверить, запущено ли приложение из пакетного (хорошо cmd) файла?
Мне не нужно запускать другой экземпляр, если программа уже запущена. (Я не могу изменить приложение, чтобы сделать его только один экземпляр.)
Также приложение может работать как любой пользователь.
Еще одна возможность, которую я придумал, вдохновленная использованием grep :
Не нужно сохранять дополнительный файл, поэтому я предпочитаю этот метод.
это работало для меня хорошо (Windows XP SP3). ИМХО, это самый элегантный способ из всех предложенных здесь, с использованием только инструментов, поставляемых с Windows У меня была проблема с синтаксисом этой командной строки. Я изменил его на tasklist /FI "IMAGENAME eq winword.exe" 2>NUL | find /I /N "winword.exe">NUL / if %ERRORLEVEL%==1 goto wordnotrunning для того, чтобы заставить его работать (подозревая цитату вокруг частей if Помните, что в других языковых версиях XP имена фильтров были переведены в код, но не в /? экран справки . Так, например, IMAGENAME в польской версии есть NAZWA_OBRAZU . Под Win7 мне пришлось поменять его на tasklist /FI "IMAGENAME eq myapp.exe" /NH | find /I /N "myapp.exe" >NUL Первый NUL кажется ненужным, я понятия не имею, для чего нужен «2», / NH не обязателен. список задач всегда выходит со статусом 0 независимо от того, находит ли он какие-либо подходящие задачи, поэтому он сам по себе бесполезен. Поскольку вы все равно должны использовать find (или findstr) для проверки его вывода, нет смысла использовать фильтры списка задач. Просто сделай список задач | найти "myprog.exe"> nul: && goto foundit или somesuch. Вам может понадобиться параметр / v (подробный) для списка задач.Вот как я это сделал:
Приведенное выше откроет Блокнот, если он еще не запущен.
Изменить: Обратите внимание, что это не найдет приложения, скрытые от списка задач. Это будет включать любые запланированные задачи, выполняемые от имени другого пользователя, поскольку они автоматически скрываются.
Изменение формата списка задач на CSV или на что угодно, кроме таблицы, важно, потому что это макет (таблица) списка задач по умолчанию усекает длинные имена изображений, что нарушает логику. Это решение не будет работать в Vista, потому что TASKLIST производит некоторые выходные данные, даже если процесс не найден. Я предполагаю, что то же самое верно для Windows 7. не работает в Windows 10. search.log содержит «INFO: не выполняются задачи, соответствующие указанным критериям». и блокнот не запускаетсяМне нравится решение Chaosmaster! Но я искал решение, которое не запускает другую внешнюю программу (например, find.exe или findstr.exe ). Поэтому я добавил идею из решения Мэтта Лейси, которое создает временный файл, которого можно избежать. В конце я смог найти довольно простое решение, поэтому я поделился им .
Это хорошо работает для меня .
Это решение хорошо работает - проверено в Windows 8.1. Я заметил, что он чувствителен к регистру. @LordScree Поскольку я работаю в un * x системах, чувствительность к регистру мне подходит! Я даже установил файловую систему, чтобы включить имена файлов с учетом регистра. ;) Хорошо работает для меня - проверено в Windows 7 X64 Это не работает, если в имени приложения есть пробел, так как% x оказывается частью имени приложения до первого пробела. Возможным решением было бы проверить, не найдено ли приложение, вместо этого, проверив% x == INFO: но я не знаю, на каких версиях Windows это будет работать или есть лучшее решение.Предложение npocmaka использовать QPROCESS вместо TASKLIST велико, но его ответ настолько велик и сложен, что я чувствую себя обязанным опубликовать довольно упрощенную версию, которая, я думаю, решит проблему большинства неопытных пользователей:
Приведенный выше код был протестирован в Windows 7 с пользователем с правами администратора.
Я просто использовал эту идею, чтобы дважды остановить автоматизированный процесс, и это сработало как шарм! Должен сказать, что в отличие от этой команды, решения для списка задач не только выглядят слишком сложными для такого простого запроса, но и запускают примерно секунду и используют тонны процессора! Это намного лучше, также работает без прав администратора (Windows Server 2012). Это, кажется, самое простое и лучшее решение (по крайней мере для меня), поскольку оно работает как есть, когда в имени приложения есть пробелы. Мне любопытно, каковы ограничения этого решения и почему у него нет больше голосов.В 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% & exit /b 1)
Обратите внимание, что WMIC требует административных привилегий; если у вас его нет, а Only the administrator group members can use WMIC.EXE. затем Reason:Win32 Error: Access is denied. я думаю, что это лучшее решение, потому что wmic дает вам полную запущенную командную строку и предоставляет другую информацию . Это на самом деле прекрасно работает. Просто! Только знайте, что это чувствительно к регистру, если вы не добавите /i . это работает для меня в Windows 7. 2-я строка - это каталог, в котором находится программа, а не сама программа.Ответ TrueY показался мне самым элегантным решением, однако мне пришлось немного повозиться, потому что я не понимал, что именно происходит. Позвольте мне все прояснить, чтобы сэкономить время для следующего человека.
Измененный ответ TrueY:
Во всяком случае, я надеюсь, что это помогает. Я знаю, что иногда чтение пакетной / командной строки может сбивать с толку, если вы новичок, как я.
Ответ предоставляется Matt Lacey работает для Windows XP. Однако в Windows Server 2003 строка
ИНФОРМАЦИЯ: Не выполняются задачи, соответствующие указанным критериям.
который затем читается при запуске процесса.
У меня нет опыта работы с пакетными сценариями, поэтому мое решение состоит в том, чтобы затем искать имя процесса в search.log файле и закачивать результаты в другой файл и искать его для любого вывода.
Я надеюсь, что это помогает кому-то еще.
Это работает для Win 2008. +1 для Нет запущенных задач, которые соответствуют указанным критериям.Я вроде WMIC и TASKLIST инструментов , но они не доступны в доме / основные изданиями windows.Another способа является использование QPROCESS команд доступны на почти каждое окно машины (для тех , которые имеют терминальные услуги - Я думаю , что только выиграть XP без SP2, так practialy каждого окна машины):
QPROCESS Команда не настолько мощна, как TASKLIST и ограничена отображением только 12 символов имени процесса, но ее следует учитывать, если TASKLIST она недоступна.
Более простое использование, когда в качестве аргумента используется имя процесса ( .exe суффикс является обязательным в этом случае, когда вы передаете имя исполняемого файла):
Разница между двумя способами QPROCESS использования заключается в том, что QPROCESS * будут перечислены все процессы, в то время как QPROCESS some.exe будут фильтроваться только процессы для текущего пользователя.
Использование WMI объектов через exe- WMIC файл сценария Windows вместо этого также является опцией. Его следует запускать также на каждой машине Windows (исключая те, где WSH выключен, но это редкий случай). Здесь находится файл bat, в котором перечислены все процессы через WMI классы и могут использоваться вместо QPROCESS приведенного выше сценария (это гибрид jscript / bat и должен быть сохранен как .bat ):
И модификация, которая проверит, запущен ли процесс:
Два варианта могут быть использованы на машинах, которые не имеют TASKLIST .
Конечная техника использует MSHTA . Это будет работать на каждой машине с Windows от XP и выше и не зависит от настроек хоста скрипта Windows. MSHTA хотя вызов может немного снизить производительность (опять же следует сохранить как bat):
Как я могу проверить, запущено ли приложение из пакетного (хорошо cmd) файла?
Мне не нужно запускать другой экземпляр, если программа уже запущена. (Я не могу изменить приложение, чтобы сделать его только один экземпляр.)
Также приложение может работать как любой пользователь.
Еще одна возможность, которую я придумал, вдохновленная использованием grep , это:
Для этого не нужно сохранять дополнительный файл, поэтому я предпочитаю этот метод.
Вот как я это сделал:
Выше откроется Блокнот , если он еще не запущен.
Правка: Обратите внимание, что это не найдет приложения, скрытые от списка задач. Это будет включать любые запланированные задачи, выполняемые от имени другого пользователя, поскольку они автоматически скрываются.
Мне нравится решение Chaosmaster! Но я искал решение, которое не запускает другую внешнюю программу (например, find.exe или findstr.exe ). Поэтому я добавил идею из решения Мэтта Лейси, которая создает временный файл, которого можно избежать. В конце концов я смог найти довольно простое решение, поэтому я делюсь им .
Это хорошо работает для меня .
В 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% & exit /b 1)
Предложение npocmaka использовать QPROCESS вместо TASKLIST велико, но его ответ настолько велик и сложен, что я чувствую себя обязанным опубликовать его довольно упрощенную версию, которая, я думаю, решит проблему большинства неопытных пользователей:
Приведенный выше код был протестирован в Windows 7 с пользователем с правами администратора.
Ответ TrueY показался мне самым элегантным решением, однако мне пришлось немного повозиться, потому что я не понимал, что именно происходит. Позвольте мне все прояснить, чтобы сэкономить время для следующего человека.
Измененный ответ TrueY:
Во всяком случае, я надеюсь, что это помогает. Я знаю, что иногда чтение пакетной/командной строки может сбивать с толку, если вы новичок, как я.
ответ предоставлен Мэттом Лэйси работает для Windows XP. Однако в Windows Server 2003 строка
ИНФОРМАЦИЯ: не выполняются задачи, соответствующие указанным критериям.
который затем читается при запуске процесса.
У меня нет опыта работы с пакетными сценариями, поэтому мое решение состоит в том, чтобы затем искать имя процесса в файле search.log и закачивать результаты в другой файл и искать его для любого вывода.
Я надеюсь, что это помогает кому-то еще.
Мне нравятся инструменты WMIC и TASKLIST , но они недоступны в домашних/базовых версиях Windows. Другой способ - использовать команду QPROCESS , доступную почти на каждой машине с Windows (для тех, у которых есть службы терминалов - я думаю, что только win XP без SP2, поэтому практически все машины Windows):
QPROCESS команда не такая мощная, как TASKLIST , и ограничена отображением только 12 символов имени процесса, но ее следует учитывать если TASKLIST недоступно.
Более простое использование, когда оно использует имя, если процесс является аргументом (суффикс .exe является обязательным в этом случае, когда вы передаете имя исполняемого файла):
Разница между двумя способами использования QPROCESS заключается в том, что QPROCESS * будет перечислять все процессы, а QPROCESS some.exe будет фильтровать только процессы для текущего пользователя.
Использование WMI объектов через сценарий Windows Host exe вместо WMIC также является опцией. Его следует запускать также на каждой машине Windows (исключая те, где WSH выключен, но это редкий случай). Здесь находится bat-файл, в котором перечислены все процессы через классы WMI и могут использоваться вместо QPROCESS в приведенном выше сценарии (это гибрид jscript/bat и должен быть сохранен как .bat ):
И модификация, которая проверит, запущен ли процесс:
Эти две опции могут использоваться на машинах, которые не имеют TASKLIST .
Конечная техника использует MSHTA . Это будет работать на каждом компьютере с Windows от XP и выше и не зависит от настроек хоста скрипта Windows. хотя вызов MSHTA может немного снизить производительность (опять же следует сохранить как bat):
Не так давно ко мне обратились за помощью в реализации такого костыля.
Чтобы он мониторил через какое-то время процесс и если он не запущен автоматически запускал.
первый вариант выглядел вот таким образом:
:proverka
tasklist | find "mspaint.exe"
if %ERRORLEVEL% EQU 1 goto restart
if %ERRORLEVEL% EQU 0 goto vremya
:vremya
timeout 10
goto proverka
:restart
start %windir%\system32\mspaint.exe
goto proverka
Данный код при запуске проверял через команду tasklist запущен или нет процесс под таким именем.
Если ответ был отрицательным то он переходит на функцию :restart и запускает нужный процесс и переходит на функцию :proverka для повторной проверки о состоянии данного процесса.
Если ответ был положительным то он переходит на функцию :vremya и ждет указанное количество секунд после переходит на функцию :proverka и далее по кругу.
У данного кода проблема в том что окно командной строки всегда виден.
Вечером немного подумал и решил bat скрипт довести до ума и скрыть назойливое окно и запускать уже автоматом скрытый процесс.
Для этого сначала создаем bat файл который добавит данную мини программу в планировщик windows.
В нем будет одна команда хотя её можно и ввести в командную строку. Лично для меня через bat файл проще.
schtasks /Create /SC minute /mo 1 /TN win /TR c:\processmonitor.exe
Самое важное в данном коде это параметр /mo 1 значения отвечают за то что программа будет исполняться каждую минуту.
изменяем на ваше усмотрение.
Дальше берем первый код и убираем лишнее и создаем файл processmonitor.bat с кодом.
tasklist | find "mspaint.exe"
if %ERRORLEVEL% EQU 1 goto restart
:restart
start %windir%\system32\mspaint.exe
Теперь осталось только файл processmonitor.bat конвертировать в exe и скрыть окно командной строки.
Данную процедуру описывал вот тут Конвертировать bat файл в exe.
На этом все пользуйтесь кому нужно не забываем коментировать, задавать вопросы и делиться с друзьями.
Читайте также: