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

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

Ответить
Настройки темы
Любой язык - [решено] Скрипт который бы запускал 2 процесса и в случае убийства одного убивал бы и другой

Старожил


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


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

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


Здрасте, вот вопрос такой:
Не знаю какой из скриптовых языков администрирования такое может и главное - как это сделать?
Суть требований такова: запускать сразу 2 процесса одновременно, и проверять, когда первый умрёт (я выгружу программу эту вручную), то надо убить и 2-ой процесс. И главное чтобы при этом не висело чёрное окно cmd или чего-то подобного.

Отправлено: 00:09, 12-10-2009

 

Ветеран


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

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


iDrug, практически любой. Вот пример на VBScript на основе WMI:

читать дальше »
Sample.vbs
Код: Выделить весь код
Option Explicit

Dim lngProcessID1, lngProcessID2

With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
	With .Get("Win32_Process")
		.Create "notepad.exe", "c:\\temp", Nothing, lngProcessID1
		.Create "calc.exe", "c:\\windows", Nothing, lngProcessID2
	End With
	
	.ExecNotificationQuery( _
		"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
		"WHERE TargetInstance ISA 'Win32_Process' AND " & _
		"TargetInstance.ProcessID = '" & CStr(lngProcessID1) & "'").NextEvent
	
	On Error Resume Next
	.Get("Win32_Process.Handle='" & CStr(lngProcessID2) & "'").Terminate
	On Error Goto 0
End With

WScript.Quit 0
«On Error Resume Next/On Error Goto 0» нужно на случай, если второй процесс будет закрыт ранее, нежели будет закрыт первый.

Насчёт чёрных окон cmd.exe относительно самих запускаемых процессов: сие уже зависит от типа процесса, консольный он или GUI. Впрочем, окно процесса что того, что другого типа можно сделать скрытым при начале исполнения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:15, 12-10-2009 | #2



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

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


Старожил


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

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


Цитата Iska:
Насчёт чёрных окон cmd.exe относительно самих запускаемых процессов: сие уже зависит от типа процесса, консольный он или GUI. Впрочем, окно процесса что того, что другого типа можно сделать скрытым при начале исполнения. »
Я имел ввиду чтобы самого окна скрипта - не было. Проверил ваш скрипт - и там его нет, чего я и хотел.
Скрипт работает только если исполняемые процессы лежат в папке windows. Иначе почему-то выдаёт сообщение об ошибке, где жалуется на:
11 строку, 2-ой символ
Ошибка: Недопустимое использование Null: 'CStr'
Код: 800А005Е

как сделать так, чтобы он работал и для других путей?

Последний раз редактировалось iDrug, 12-10-2009 в 05:01.


Отправлено: 03:55, 12-10-2009 | #3


Ветеран


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

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


Цитата iDrug:
Я имел ввиду чтобы самого окна скрипта - не было. Проверил ваш скрипт - и там его нет, чего я и хотел. »
Если у Вас исполняющим ядром Windows Script Host по умолчанию является «wscript.exe» (таким оно является после установки, и у обычных пользователей, как правило, не меняется) — тогда окна консоли не будет:
читать дальше »
Цитата wscript.exe /?:
Использование: WScript имя_сценария.расширение [параметры...] [аргументы...]

Параметры:

//E:ядро Использование указанного ядра для выполнения сценария
//H:CScript Стандартный сервер сценариев заменяется на CScript.exe
//H:WScript Стандартный сервер сценариев заменяется на WScript.exe (по умолчанию)

Цитата iDrug:
Скрипт работает только если исполняемые процессы лежат в папке windows.»
Не совсем так. Метод «.Create()» класса «Win32_Process», если не указан путь, ищет исполняемые файлы в текущем каталоге, затем в каталогах, перечисленных в переменной окружения PATH:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim lngProcessID1, lngProcessID2

With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
	With .Get("Win32_Process")
		.Create "c:\\program files\\far\\far.exe", "c:\\temp", Nothing, lngProcessID1
		.Create "winrar.exe", "c:\\windows", Nothing, lngProcessID2
	End With
	
	.ExecNotificationQuery( _
		"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
		"WHERE TargetInstance ISA 'Win32_Process' AND " & _
		"TargetInstance.ProcessID = '" & CStr(lngProcessID1) & "'").NextEvent
	
	On Error Resume Next
	.Get("Win32_Process.Handle='" & CStr(lngProcessID2) & "'").Terminate
	On Error Goto 0
End With

WScript.Quit 0
В этом примере «Far Manager» запускается с использованием полного пути (ещё раз обратите внимание на использование двух слэшэй в качестве разделителей), а Winrar.exe — без указания, поскольку в PATH присутствует путь к каталогу Winrar'а:
Цитата path:
PATH=C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM; … C:\PROGRAM FILES\WINRAR; …
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:01, 12-10-2009 | #4


Старожил


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

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


и всё равно у меня почему-то выдаёт ту же ошибку...
вот как у меня:
Код: Выделить весь код
		.Create "C:\\Portable soft\\TotalCommanderPortable\\TotalCommanderPortable.exe", "c:\\temp", Nothing, lngProcessID1
		.Create "C:\\Portable soft\\TotalCommanderPortable\\megascroll.exe", "c:\\temp", Nothing, lngProcessID2
сам *.vbs скрипт при этом находится в той же папке где и 2 программы, которые я хочу запустить.

-------
Windows 7SP1x64 Максимальная RU


Отправлено: 14:01, 12-10-2009 | #5


Ветеран


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

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


iDrug,
а) у Вас существует каталог «c:\temp»?
б) подозреваю, что, возможно, следить надо будет не за «TotalCommanderPortable.exe». Впрочем, сначала ответьте на а).
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:28, 12-10-2009 | #6


Старожил


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

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


спасибо, указали на ошибку. Я просто в этом ни черта не понимаю и подумал что он проверяет по 1-ому пути и если там нет этого объекта то ищет по второму, потому я во втором пути и указал несуществующий путь, т.к. подумал что он нафиг не нужен.
исправил на любой другой существующий путь - и скрипт заработал, спасибо.

p.s.: хотя, как выяснилось, 2-ой запускаемый процесс (на самом деле это AutoHotkey скрипт) позволяет сделать то же самое только своими собственными силами. Тем не менее ваш скрипт я сохраню - мало ли где в хозяйстве пригодится?

-------
Windows 7SP1x64 Максимальная RU


Отправлено: 17:47, 12-10-2009 | #7


Ветеран


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

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


Цитата iDrug:
Я просто в этом ни черта не понимаю »
Create Method of the Win32_Process Class (Windows)
Второй параметр метода .Create() задаёт текущий каталог для запускаемого приложения (примерно то же, что и «Рабочая папка» в свойствах ярлыка). Его можно задать, например, равным каталогу, откуда запускается скрипт:
Код: Выделить весь код
…
Dim strScriptPath

strScriptPath = WScript.CreateObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName).ParentFolder

With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
	With .Get("Win32_Process")
		.Create "C:\\Portable soft\\TotalCommanderPortable\\TotalCommanderPortable.exe", strScriptPath, Nothing, lngProcessID1
		…
Цитата iDrug:
хотя, как выяснилось, 2-ой запускаемый процесс (на самом деле это AutoHotkey скрипт) позволяет сделать то же самое только своими собственными силами. »
Сие будет ещё лучше. Если доступен исходный текст, Вы можете его исправить так, чтобы именно он запускал «TotalCommanderPortable.exe» и следил за ним.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 12-10-2009 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Нужен управляющий скрипт который перезапускает программу. andrewua12 Скриптовые языки администрирования Windows 10 06-07-2009 19:25
[решено] Нужен управляющий скрипт который перезапускает программу. andrewua12 AutoIt 3 04-07-2009 16:09
[решено] Скрипт для продолжения установки после отработки процесса Pozia AutoIt 5 15-05-2009 18:39
[решено] как извлечь CD .. тоесть нужен скрипт или EXE который при запуске извлекал бы CD nattropin_new Автоматическая установка Windows 2000/XP/2003 9 24-03-2007 23:57
[решено] Копирование WIN98 с одного ж.диска на другой Evgen77 Microsoft Windows 95/98/Me (архив) 21 06-12-2006 00:22




 
Переход