![]() |
Батник отслеживающий и убивающий процесс
Доброго времени!
Есть программа, которая через некоторое время после старта запускает дополнительный процесс который отнимает время для загрузки в программу всяких ненужностей Я хотел бы чтоб батник отследил запуск этого ненужного процесса убил бы его и закрыл бы свое окошко. Я сделал вот такой вариант, но не могу отследить точное время когда запускается процесс, если не успеваю на три секунды убить процесс то он успевает подгрузить в программу ненужные мне вещи. start "" "C:\Program Files (x86)\Matrix90\Matrix90.exe" timeout /t 30 taskkill /f /im MatrixStartup.exe Процесс начинает работать примерно с 25 по 30 секунды после старта программы Бывает и через 27 сек а бывает и ровно через 30. Вот в этом интервале я хотел бы чтоб батник искал и пытался убить бы этот процесс через каждые 0.5 секунды. |
а что мешает сделать цикл с запуском через 23 секунда и на протяжении 10 секунда убивать этот процесс?
|
Цикл и хотел бы сделать. Но мешает отсутствие знаний
|
Gragl, можете просто переименовать исполняемый файл процесса, если он Вам не нужен? А так — WSH: Prevent a Process from Running.
|
Этот файл я решил удалить, но тогда загрузка программы прекращается. Соответственно переименование тоже не подходит.
|
Iska
По Вашей ссылке скрипт. в батниках то мало чего понимаю.. Я конечно могу в батнике повторить 20 раз taskkill /f /im MatrixStartup.exe Но это мне кажется совсем топорно. помогите сделать изящный 10 секундный цикл пожалуйста :) |
Изящество не обещаю.
Скрытый текст
Код:
start "" "C:\Program Files (x86)\Matrix90\Matrix90.exe" Можно конечно раз в секунду искать есть такой процесс или нету, и при его наличии удалять его. Но если проще, то проще просто сразу килять его. |
Большое спасибо Вам!
Вечером буду тестировать |
Цитата:
Цитата:
|
Цитата:
Код:
@echo off |
Molchune, Ваш код работает!
alpap, Ваша идея прекрасна, но в код пытался внести свои значения но ничего не получилось. Код не отслеживает а убивает процесс только в тот момент когда я запускаю батник @echo off set "p=MatrixStartup.exe" cmd /c for /l %%i in (1,1,10) do @tasklist /fi "MatrixStartup eq %p%"^|findstr /v :^&^& (taskkill /f /im "%p%"^& exit /b)^&^>nul timeout /t 1 /nobreak Цитата:
C подменой файла и переименованием получилось. Этому я очень удивился! Заинтересовал код из Вашей ссылки, я заменил имя процесса на свое и тоже сработало :) А можно ли сделать так чтоб код запускал мою программу, отслеживал процес и когда бы его нашел и прикончил закрыл бы свое окошко и не висел бы в процессах? |
пытаюсь стартануть прогу, но в третей сторке пишет что не может найти указанный файл
set WSShell = createobject("Wscript.Shell") WSShell.CurrentDirectory="C:\Program Files (x86)\Matrix90\" WSShell.run "C:\Program Files (x86)\Matrix90\Matrix90.exe",0 такой код в отдельном файле запускает прогу, но если его вставить в файл из Вашей ссылки то ошибка (переменная не определена) Option Explicit Dim wsh Set wsh = WScript.CreateObject("WScript.Shell") wsh.Run("""C:\Program Files (x86)\Matrix90\Matrix90.exe") Set wsh = Nothing |
Получилось :)
set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run """C:\Program Files (x86)\Matrix90\Matrix90.exe""",1 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colMonitoredProcesses = objWMIService. _ ExecNotificationQuery("select * from __instancecreationevent " _ & " within 1 where TargetInstance isa 'Win32_Process'") i = 0 Do While i = 0 Set objLatestProcess = colMonitoredProcesses.NextEvent If objLatestProcess.TargetInstance.Name = "MatrixStartup.exe" Then objLatestProcess.TargetInstance.Terminate End If Loop Теперь осталось научиться завершить процесс скрипта |
Цитата:
Код:
cmd /c for /l %%i in () do ... (и далее с проверкой раз в секунду) ... timeout /t 1 /nobreak Цитата:
это что за ..., не знаете синтаксиса или справку смотрите или спрашивайте или не трогайте код должен быть запущен заранее (естественно), до появления процесса и как процесс появится, он будет отключен и код прекратит работу. |
alpap,
Сейчас в Вашем коде я заменил только set "p=process.exe" на set "p=MatrixStartup.exe" Запускаю батник с этим кодом, на мгновение появляется и исчезает окошко консоли. Потом запускаю прогу. Стартует ненужный процесс MatrixStartup.exe работает и не прерывается. Может быть я делаю что то не верно? @echo off set "p=MatrixStartup.exe" cmd /c for /l %%i in () do @tasklist /fi "imagename eq %p%"^|findstr /v :^&^& (taskkill /f /im "%p%"^& exit /b)^&^>nul timeout /t 1 /nobreak |
Цитата:
Код:
Option Explicit |
Цитата:
в вашем случае, вероятно, процесс "MatrixStartup.exe" все же уже запущен до запуска кода и он и код убивается, а следующий запущенный процесс "MatrixStartup.exe" уже некому убивать, процесс cmd уже отключился. |
Iska,
Все сделал как Вы сказали :) Просто супер! Большое Вам спасибо! alpap, А Ваш код, к сожалению, не работает в режиме ожидания процесса. Срабатывает только тогда, когда я его вызываю. Все также на мгновение появляется и исчезает окно, выполняя одну команду taskkill /f /im "%p% Я попробовал протестировать его на примере калькулятора. Очень хотелось бы увидеть его в деле, но увы, результат тот же. @echo off set "p=calc.exe" cmd /c for /l %%i in () do @tasklist /fi "imagename eq %p%"^|findstr /v :^&^& (taskkill /f /im "%p%"^& exit /b)^&^>nul timeout /t 1 /nobreak |
Вложений: 1
Чтобы посмотреть что происходит в окне я добавил pause в файл с кодом расширения .bat
И увидел странный знак "■" в отчете "■t" не является внутренней или внешней командой. Откуда взялся этот знак не пойму. Сохранял в кодировке ANSI и UTF-8 @echo off set "p=calc.exe" cmd /c for /l %%i in () do tasklist /fi "imagename eq %p%"^|findstr /v :^&^& (taskkill /f /im "%p%"^& exit /b)^&^>nul timeout /t 1 /nobreak pause |
Gragl,
явно с кодом вы что-то уже нахомутали так как в оригинале и с calc.exe все прекрасно работает: Код:
@echo off скрины 3 и 4 сделаны, когда в коде первой строкой: @echo on вместо @echo off P.S. а что за ОС у вас? даже скопипастил выше ваш вариант, там отличие только в отсутствии @ перед tasklist что не имеет значение на работу кода - все работает как надо. уже даже и в utf-8 попробовал запустить - нет проблем (скрин) что ни пробовал, не смог смоделировать ситуацию как у вас на скрине. похоже я догадываюсь откуда "ноги растут" у t и в чем дело. ОС у вас похоже XP и там нет timeout, так как нет, поэтому попробуйте в коде вместо окончания: >nul timeout /t 1 /nobreak, записать: >nul ping -n 2 127.0.0.1, вот так: Код:
@echo off |
Моя рабочая система W8.1 (64)
На ней не работает Ваш код Все другие батники на этой системе работают хорошо. Проверил свой же код на W7 64 Прекрасно работает Ваш оригинал тоже работает хорошо. В чем же может быть причина неправильной работы на моей W8.1 (64) ? Обработчик команд Windows C:\Windows\System32\cmd.exe |
Цитата:
может пиратка урезанная какая-то, там такой код что и нечему не работать просто. |
Вложений: 1
не работает
Пишет что "■t" не является внутренней или внешней командой. W8.1 64 корпоративная |
Gragl, упакуйте Ваш получившийся пакетный файл в архив, каковой выложите на DropMeFiles.com.
|
|
Gragl, это файлы именно с машины с Windows 8.1?
|
да, с этого компьютера.
проверял их на W7. там работают. |
Gragl, спасибо, ясно. Идей нет.
|
как вариант можно сделать на autoit'е с контролем и завершением процесса. При этом процесс опрашивается приблизительно каждые 250 миллисекунд. И потом добавить скрипт в планировщик заданий с запуском скрипта при старте системы
|
habib2302, это уже есть в теме. Без использования сторонних средств, на WSH.
|
Благодарю всех за Вашу поддержку!
Буду пользоваться VBS by Iska |
Ну тогда ещё вариант на powershell, с возможностью слежения за несколькими процессами, с кнопкой на прекращение слежения (процесс powershell через батник запускается в скрытом режиме):
run.bat Код:
@echo off script.ps1
Код:
[cmdletbinding()] |
YuS_2, «win32calc.exe» — это, случайно, не новое имя исполняемого файла старого доброго Калькулятора под ОС Windows 10?
|
Цитата:
|
YuS_2, спасибо, ясно. А то я там на днях по привычке сделал Win-R, calc.exe, Enter и был неприятно удивлён результатом.
|
Цитата:
в общем, скучать индусы не дадут. :) |
YuS_2, стоп. Говоря «старый и добрый», я имел в виду обычный Калькулятор, а не его богомерзкую Modern (или как оно там нынче именуется) инкарнацию:
Скрытый текст
Получается — его больше нет? |
Цитата:
![]() ![]() |
Хмм… Попробую завтра «пощупать».
|
Время: 22:44. |
Время: 22:44.
© OSzone.net 2001-