|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Задача: перезагрузить процесс, при пропаже другого процесса |
|
|
VBS/WSH/JS - Задача: перезагрузить процесс, при пропаже другого процесса
|
Старожил Сообщения: 181 |
Добрый день, 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 |
|
------- Отправлено: 08:37, 26-09-2016 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Может быть другую реализацию на Pshell или даже Bat... Но там как-то жутко непонятно в Shell как писать шаги.
|
------- Отправлено: 08:41, 26-09-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Мне логика Вашего алгоритма непонятна. Вот запустили Процесс №2. Он запустил Процесс №1. Прошло два часа. Процесс №1 корректно отработал и завершился. Процесс №2 продолжает свою работу ещё два часа. Но согласно описанному Вами алгоритму, Процесс №2 должен быть снят и запущен вновь.
Поясните. |
Отправлено: 08:49, 26-09-2016 | #3 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 10:03, 26-09-2016 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать После 3 часов закуривания Осзона, ожидания каждого раза запуска скрипта в vbscript (с каждым запуском на секунду дольше) я совсем голову потерял к двум ночи))
|
------- Отправлено: 13:14, 26-09-2016 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Jullian BrennanEG:
|
|
Отправлено: 13:17, 26-09-2016 | #7 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 14:46, 26-09-2016 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать А что с предложенным мною вариантом?
|
Отправлено: 14:49, 26-09-2016 | #9 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Не работает.
ПРи запуске скрипта запускается TC, из под него запускаю блокнот. Закрываю его, ТС не перезагружается. Т.е хотелось бы чтобы Скрипт запустил Процесс 1 и Процесс 2. Следил за процессом 1, в случае его отсутствия убивал процесс 2 и запускал его снова. Скрипт нужен для автоматической перезагрузки приложений. |
------- Отправлено: 08:26, 27-09-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|