Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник отслеживающий и убивающий процесс

Ответить
Настройки темы
CMD/BAT - [решено] Батник отслеживающий и убивающий процесс

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Gragl
Дата: 26-04-2019
Доброго времени!
Есть программа, которая через некоторое время после старта запускает дополнительный процесс который отнимает время для загрузки в программу всяких ненужностей
Я хотел бы чтоб батник отследил запуск этого ненужного процесса убил бы его и закрыл бы свое окошко.

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


start "" "C:\Program Files (x86)\Matrix90\Matrix90.exe"
timeout /t 30
taskkill /f /im MatrixStartup.exe

Процесс начинает работать примерно с 25 по 30 секунды после старта программы Бывает и через 27 сек а бывает и ровно через 30.
Вот в этом интервале я хотел бы чтоб батник искал и пытался убить бы этот процесс через каждые 0.5 секунды.

Отправлено: 08:41, 26-04-2019

 

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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


Цитата Iska:
Значит, пора учиться. »
А Вы научите ?
C подменой файла и переименованием получилось. Этому я очень удивился!
Заинтересовал код из Вашей ссылки, я заменил имя процесса на свое и тоже сработало
А можно ли сделать так чтоб код запускал мою программу, отслеживал процес и когда бы его нашел и прикончил закрыл бы свое окошко и не висел бы в процессах?

Отправлено: 15:39, 26-04-2019 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


пытаюсь стартануть прогу, но в третей сторке пишет что не может найти указанный файл

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

Отправлено: 16:45, 26-04-2019 | #12


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Получилось

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

Теперь осталось научиться завершить процесс скрипта

Отправлено: 17:08, 26-04-2019 | #13


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Gragl:
в код пытался внести свои значения »
не надо этого было делать, это бесконечный цикл
Код: Выделить весь код
cmd /c for /l %%i in () do ... (и далее с проверкой раз в секунду) ... timeout /t 1 /nobreak
Цитата Gragl:
MatrixStartup eq ...»
вместо: "imagename eq ..."
это что за ..., не знаете синтаксиса или справку смотрите или спрашивайте или не трогайте
код должен быть запущен заранее (естественно), до появления процесса и как процесс появится, он будет отключен и код прекратит работу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:00, 26-04-2019 | #14


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:25, 26-04-2019 | #15


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Gragl:
А можно ли сделать так чтоб код запускал мою программу, отслеживал процес и когда бы его нашел и прикончил закрыл бы свое окошко и не висел бы в процессах? »
У него нет «окошка» (если только Вы не исполняете код под консольным cscript.exe). Можно:
Код: Выделить весь код
Option Explicit

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
	.Get("Win32_Process").Create "c:\Windows\System32\notepad.exe", "c:\Windows\System32", Nothing, Empty
	
	.ExecNotificationQuery( _
		"SELECT * FROM __InstanceCreationEvent " & _
		"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
		"TargetInstance.Name = 'calc.exe'" _
	).NextEvent.TargetInstance.Terminate
End With

WScript.Quit 0
В роли процесса, который нужно запустить — Блокнот, в роли процесса, который следует следом «прихлопнуть» — Калькулятор. Замените имена и пути на свои. Будет работать, только если всё происходит именно так, как Вы описали.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:57, 26-04-2019 | #16


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Gragl:
на мгновение появляется и исчезает окошко консоли »
а вот исчезать не должно, должно висеть пустое окно и ждать процесса, как появится процесс, пропадет и процесс и окно закроется
в вашем случае, вероятно, процесс "MatrixStartup.exe" все же уже запущен до запуска кода и он и код убивается, а следующий запущенный процесс "MatrixStartup.exe" уже некому убивать, процесс cmd уже отключился.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:18, 26-04-2019 | #17


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Gragl, 27-04-2019 в 13:45.


Отправлено: 03:39, 27-04-2019 | #18


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg 2019-04-27_23-38-43.jpg
(24.2 Kb, 7 просмотров)

Чтобы посмотреть что происходит в окне я добавил 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, 27-04-2019 в 19:55.


Отправлено: 17:57, 27-04-2019 | #19


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Gragl,
явно с кодом вы что-то уже нахомутали так как в оригинале и с calc.exe все прекрасно работает:
Код: Выделить весь код
@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
скрины: 1 2 3 4
скрины 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
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 ping -n 2 127.0.0.1
pause
только не надо utf-8 сохранять, сохраняйте в 1251 или лучше 866.

Последний раз редактировалось alpap, 27-04-2019 в 23:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:23, 27-04-2019 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник отслеживающий и убивающий процесс

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - батник сообщение kairox@vk Скриптовые языки администрирования Windows 7 14-10-2014 15:24
Любой язык - [решено] батник с автозагрузкой в реестр. Чтоб при загрузке загружался батник с автозагрузкой AndriuT Скриптовые языки администрирования Windows 10 01-08-2014 20:10
VBS/WSH/JS - [решено] Открыть привод, корректно убить процесс, закрыть привод и снова убить процесс - как? Nun-Nun Скриптовые языки администрирования Windows 8 31-10-2011 15:25
CMD/BAT - Батник который закрывает процесс nullnull_ru Скриптовые языки администрирования Windows 2 21-01-2011 05:22
Вопрос - [решено] Вирус убивающий флешки.Руководство к действию. Мартиша Накопители (SSD, HDD, USB Flash) 16 07-10-2010 19:59




 
Переход