|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник отслеживающий и убивающий процесс |
|
CMD/BAT - [решено] Батник отслеживающий и убивающий процесс
|
Новый участник Сообщения: 22 |
Доброго времени!
Есть программа, которая через некоторое время после старта запускает дополнительный процесс который отнимает время для загрузки в программу всяких ненужностей Я хотел бы чтоб батник отследил запуск этого ненужного процесса убил бы его и закрыл бы свое окошко. Я сделал вот такой вариант, но не могу отследить точное время когда запускается процесс, если не успеваю на три секунды убить процесс то он успевает подгрузить в программу ненужные мне вещи. 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
|
Профиль | Отправить 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
|
Профиль | Отправить 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
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата Gragl:
Цитата Gragl:
это что за ..., не знаете синтаксиса или справку смотрите или спрашивайте или не трогайте код должен быть запущен заранее (естественно), до появления процесса и как процесс появится, он будет отключен и код прекратит работу. |
||
Отправлено: 18:00, 26-04-2019 | #14 |
Новый участник Сообщения: 22
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата Gragl:
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
|
Профиль | Отправить PM | Цитировать Цитата Gragl:
в вашем случае, вероятно, процесс "MatrixStartup.exe" все же уже запущен до запуска кода и он и код убивается, а следующий запущенный процесс "MatrixStartup.exe" уже некому убивать, процесс cmd уже отключился. |
|
Отправлено: 22:18, 26-04-2019 | #17 |
Новый участник Сообщения: 22
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Чтобы посмотреть что происходит в окне я добавил 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
|
Профиль | Отправить 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 скрины 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, вот так: только не надо utf-8 сохранять, сохраняйте в 1251 или лучше 866. |
Последний раз редактировалось alpap, 27-04-2019 в 23:13. Отправлено: 22:23, 27-04-2019 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|