AVanti473
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Lovec В первом, представленном Вами скриншоте (без строки "ProcessExternalNameBehavior=Original") все процессы программы маскируются под процессы портабельного контейнера. После добавления строчки, мы видим оригинальные процессы программы так, как будто она не находится в портабельном контейнере, а работает как установленная на компе. Разумеется мы видим и процесс екзешника портабельной сборки, наверняка он чуть выше места, заснятого во втором скрине, но он нам уже не нужен. Я не супер специалист в этом деле, но предположил бы, что нужно вписать в скрипты убиваемых процессов: adobe_licutil.exe CEPServiceManaqer. exe LogTransport2.exe Если конечно именно они остаются висеть, после завершения портабельной программы. Смущает: svchost.exe Но, может быть, при закрытии вышеперечисленных процессов, он сам отомрёт?... Таким образом, я бы попробовал бы такую нелепую конструкцию: Конечно же оставляем строку ProcessExternalNameBehavior=Original и вставляем в сборку фаил скрипта, например такой: Код: Function OnFirstParentExit Dim objWMIService, objProcess, colProcessList Dim strComputer strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'adobe_licutil.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next End Function Function OnFirstParentExit Dim objWMIService, objProcess, colProcessList Dim strComputer strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'CEPServiceManaqer. exe'") For Each objProcess in colProcessList objProcess.Terminate() Next End Function Function OnFirstParentExit Dim objWMIService, objProcess, colProcessList Dim strComputer strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'LogTransport2.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next End Function | Названия процессов снимал ABBYY Screenshot Readeroм, так что убедитесь в правильности их записи. Объявление Dim наверняка можно вынести одной строкой, чтобы не дублировать трижды, да и сам скрипт можно записать компактнее со знанием дела, но это уже не ко мне, так как я не зря уже упоминал, что скрипты я просто находил от случая к случаю. Сам же vbs скриптами не занимаюсь, и так же иногда прошу помощи форумчан по вопросам скриптов |