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

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

Ответить
Настройки темы
CMD/BAT - [решено] Остановка программы

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


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

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


Нужно что-бы при появлении определённого процесса программа останавливалась, а если процесс пропадёт-запускалась

Отправлено: 11:46, 02-08-2017

 

Ветеран


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

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


Цитата idenchik1488@vk:
определённого процесса »
Имя процесса?

Цитата idenchik1488@vk:
программа »
Имя программы?

Цитата idenchik1488@vk:
останавливалась »
Завершалась?

Отправлено: 12:09, 02-08-2017 | #2



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

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


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


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

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


Цитата Iska:
Имя процесса? »
process.exe
Цитата Iska:
Имя программы? »
taskmgr.exe
Цитата Iska:
Завершалась? »
Да

Отправлено: 13:48, 02-08-2017 | #3


Ветеран


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

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


Процесс:
Цитата idenchik1488@vk:
process.exe »
— может быть запущен более чем в одном экземпляре?

Отправлено: 14:35, 02-08-2017 | #4


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


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

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


Цитата Iska:
— может быть запущен более чем в одном экземпляре? »
Нет, только в 1

Отправлено: 14:49, 02-08-2017 | #5


Ветеран


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

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


вот отдельно
Код: Выделить весь код
@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
:: Пропал процесс - выполнить команду и закрытся
cmd/c for /l %%i in () do @tasklist /fi "imagename eq %p%"^|findstr/v :^|^| (echo Команда^& exit/b)^&^>nul ping -n 2 127.0.0.1
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:01, 03-08-2017 | #6


Ветеран


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

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


idenchik1488@vk, с учётом изложенного Вами примерно так (WSH, VBScript):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strProcess4Waiting
Dim strProcess4Running


Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim lngProcessID


strProcess4Waiting = "calc.exe"
strProcess4Running = "taskmgr.exe"

Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")

Do
	With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '" & strProcess4Waiting & "'")
		With .NextEvent.TargetInstance
			WScript.Echo "Detect starting process [" & .Name & "], PID: [" & .ProcessID & "]."
			
			For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcess4Running & "'")
				If objSWbemObjectEx.Terminate() = 0 Then
					WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminated successfully."
				Else
					WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminate failure."
				End If
			Next
			
			With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Handle = '" & .ProcessID & "'")
				With .NextEvent.TargetInstance
					WScript.Echo "Detect finishing process [" & .Name & "], PID: [" & .ProcessID & "]."
					
					If objSWbemServicesEx.Get("Win32_Process").Create(strProcess4Running, Null, Null, lngProcessID) = 0 Then
						WScript.Echo "Process [" & strProcess4Running & "], PID: [" & lngProcessID & "] started successfully."
					Else
						WScript.Echo "Process [" & strProcess4Running & "] start failure."
					End If
				End With
			End With
		End With
	End With
Loop

Set objSWbemServicesEx = Nothing

WScript.Quit 0

В роли «process.exe» в примере выступает Калькулятор. Запускать скрипт посредством cscript.exe.

Отправлено: 12:58, 04-08-2017 | #7


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


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

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


мне этот скрипт очен понравился но можно ли поменять путь C:\Windows\System32\calc.exe на другое например C:\Windows\calc.exe и как это сделать ?

Отправлено: 19:07, 24-10-2017 | #8


Ветеран


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

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


Raymans, где Вы собираетесь «поменять путь», если последний нигде в скрипте не используется?

Отправлено: 20:52, 24-10-2017 | #9


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


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

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


не совсем понял тоесть поменять путь не возможно что ли?

Отправлено: 10:01, 28-10-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Принудительная остановка программы "Avast" и редактирования его ветвей реестра turbolover Скриптовые языки администрирования Windows 4 22-07-2015 01:23
Разное - Остановка счётчика триальной программы или восстановление её работы beowulf0208 Microsoft Windows 7 1 14-03-2011 12:41
Остановка винчестера Gover Накопители (SSD, HDD, USB Flash) 40 08-01-2011 01:10
Службы - Остановка времени. benwar Microsoft Windows 7 5 30-09-2010 01:24
Остановка винчестера Zur0 Железо в Linux 6 18-12-2002 07:09




 
Переход