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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Задача: перезагрузить процесс, при пропаже другого процесса

Ответить
Настройки темы
VBS/WSH/JS - Задача: перезагрузить процесс, при пропаже другого процесса

Старожил


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


Конфигурация

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


Добрый день, OSzone! Есть два процесса, один работает 2 часа, второй 4 часа. Процесс 1 запускается процессом 2 и является важным компонентом для него. При пропаже процесса 1, процесс 2 должен убиваться и запускаться заново. Он же сам запускает снова процесс 1.
Попытался накидать скрипт на VBS, но он ругается...
Код: Выделить весь код
strTarget = "Calc.exe"
strDouble = "Notepad.exe"
strComputed= "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & "." & "\root\cimv2")
    
Set objTargetColl = objWMIService.ExecQuery( _
    "Select * from Win32_Process " _
    & "Where Name = '"& strTarget &"'")

Set objDoubleColl = objWMIService.ExecQuery( _
    "Select * from Win32_Process " _
    & "Where Name = '"& strDouble &"'")
     If objTargetColl.Count = 0 Then
 
     Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2:Win32_Process")
     For Each strDouble in objDoubleColl
         objDoubleColl.Terminate() 
     
     End If

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 08:37, 26-09-2016

 

Старожил


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

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


Может быть другую реализацию на Pshell или даже Bat... Но там как-то жутко непонятно в Shell как писать шаги.

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 08:41, 26-09-2016 | #2



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

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


Ветеран


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

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


Мне логика Вашего алгоритма непонятна. Вот запустили Процесс №2. Он запустил Процесс №1. Прошло два часа. Процесс №1 корректно отработал и завершился. Процесс №2 продолжает свою работу ещё два часа. Но согласно описанному Вами алгоритму, Процесс №2 должен быть снят и запущен вновь.

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

Отправлено: 08:49, 26-09-2016 | #3


Старожил


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

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


Цитата Iska:
Поясните. »
Да, все верно. Процесс 2 запускает процесс 1, который живет два часа и помирает. И когда он помирает, надо перезапускать процесс 2, чтобы снова работали оба процесса. Иногда процесс 1 падает без причин, поэтому и нужна такая вещь.

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 10:03, 26-09-2016 | #4


Ветеран


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

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


Ясно. Для данного сценария Калькулятор и Блокнот в качестве образца не вполне годятся, поскольку запускать второй из-под первого практически невозможно несколько затруднительно . Попробуйте так (сейчас посмотрел — вот страшилище ):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strPath1, strPath2

Dim objSWbemServicesEx

Dim objSWbemObjectEx
Dim lngProcessID


strPath1 = "C:\Program Files\totalcmd\TOTALCMD64.EXE"
strPath2 = "c:\Windows\System32\Notepad.exe"

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
	Do
		If .Get("Win32_Process").Create(strPath1, Null, Null, lngProcessID) = 0 Then
			.ExecNotificationQuery( _
				"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
				"WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.ProcessID = " & CStr( _
					.ExecNotificationQuery( _
						"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
						"WHERE TargetInstance ISA 'Win32_Process' AND " & _
						"TargetInstance.ExecutablePath = '" & Replace(strPath2, "\", "\\") & "' AND " & _
						"TargetInstance.ParentProcessId = " & CStr(lngProcessID) _
					).NextEvent.TargetInstance.ProcessID _
				) _
			).NextEvent
			
			.Get("Win32_Process.Handle=" & CStr(lngProcessID)).Terminate
		Else
			WScript.Echo "Can't execute process [" & strPath1 & "]."
			
			Exit Do
		End If
	Loop
End With

WScript.Quit 0

Отправлено: 11:24, 26-09-2016 | #5


Старожил


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

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


После 3 часов закуривания Осзона, ожидания каждого раза запуска скрипта в vbscript (с каждым запуском на секунду дольше) я совсем голову потерял к двум ночи))

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 13:14, 26-09-2016 | #6


Ветеран


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

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


Цитата Jullian BrennanEG:
с каждым запуском на секунду дольше »
Вы их хоть снимаете из процессов?

Отправлено: 13:17, 26-09-2016 | #7


Старожил


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

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


Цитата Iska:
Вы их хоть снимаете из процессов? »
До рабочего варианта дошло лишь раз. А потом начал ругаться что он не может распознать коллекцию. А потом не смог разобратясь почему оно птосянно просит Next после End If

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 14:46, 26-09-2016 | #8


Ветеран


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

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


А что с предложенным мною вариантом?

Отправлено: 14:49, 26-09-2016 | #9


Старожил


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

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


Не работает.
ПРи запуске скрипта запускается TC, из под него запускаю блокнот. Закрываю его, ТС не перезагружается.
Т.е хотелось бы чтобы
Скрипт запустил Процесс 1 и Процесс 2.
Следил за процессом 1, в случае его отсутствия убивал процесс 2 и запускал его снова.
Скрипт нужен для автоматической перезагрузки приложений.

-------
Го го го !Го в Garena в жжзнгиь!


Отправлено: 08:26, 27-09-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Задача: перезагрузить процесс, при пропаже другого процесса

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Завершение одного процесса и запуск другого с помощью bat-файла irbis85 Скриптовые языки администрирования Windows 7 26-05-2015 19:19
Доступ - [решено] Как запустить процесс от имени другого ограниченного пользователя XP cyberovskij Microsoft Windows 2000/XP 4 20-07-2012 19:18
Разное - Приостановить процесс, перезагрузить комп, продолжить работу процесса Pavluha Microsoft Windows 2000/XP 1 23-05-2012 07:34
CMD/BAT - [решено] Как завершить процесс по пути файла процесса? navigator19 Скриптовые языки администрирования Windows 1 21-07-2010 11:54
О пропаже файлов в системных папках при загрузке через 2-ю ОС Wasil Microsoft Windows 2000/XP 1 18-09-2006 21:20




 
Переход