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

Аватара пользователя
idenchik1488@vk

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

Сообщение idenchik1488@vk »

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

Re: CMD/BAT - [решено] Остановка программы

Сообщение idenchik1488@vk »

Цитата idenchik1488@vk:



определённого процесса
CMD/BAT - [решено] Остановка программы




Имя процесса?




Цитата idenchik1488@vk:



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




Имя программы?




Цитата idenchik1488@vk:



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




Завершалась?
Аватара пользователя
idenchik1488@vk

Re: CMD/BAT - [решено] Остановка программы

Сообщение idenchik1488@vk »

Цитата Iska:



Имя процесса?
CMD/BAT - [решено] Остановка программы




process.exe


Цитата Iska:



Имя программы?
CMD/BAT - [решено] Остановка программы




taskmgr.exe


Цитата Iska:



Завершалась?
CMD/BAT - [решено] Остановка программы




Да
Аватара пользователя
idenchik1488@vk

Re: CMD/BAT - [решено] Остановка программы

Сообщение idenchik1488@vk »

Процесс:


Цитата idenchik1488@vk:



process.exe
CMD/BAT - [решено] Остановка программы




— может быть запущен более чем в одном экземпляре?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Остановка программы

Сообщение Iska »

Цитата Iska:



— может быть запущен более чем в одном экземпляре?
CMD/BAT - [решено] Остановка программы




Нет, только в 1
Аватара пользователя
idenchik1488@vk

Re: CMD/BAT - [решено] Остановка программы

Сообщение idenchik1488@vk »

вот отдельно



Код:

Код: Выделить всё

@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
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Остановка программы

Сообщение alpap »

вот отдельно



Код:

Код: Выделить всё

@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
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Остановка программы

Сообщение Iska »

idenchik1488@vk, с учётом изложенного Вами примерно так (WSH, VBScript):



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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.
Аватара пользователя
Raymans

Re: CMD/BAT - [решено] Остановка программы

Сообщение Raymans »

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

Re: CMD/BAT - [решено] Остановка программы

Сообщение Raymans »

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

Вернуться в «Скриптовые языки администрирования Windows»