; Стартер для портабельной версии ProcessHacker v.1.01 (C) Smitis, 2017 #requireadmin ; UDF для работы с сервисами https://www.autoitscript.com/forum/topic/80201-_service_udf-v4-build-your-own-service-with-autoit-code/ #include "services.au3" Opt("ExpandEnvStrings",0) Opt("ExpandVarStrings",0) Opt("WinTextMatchMode",2) Opt("WinTitleMatchMode",3) ; точное сравнение с заголовком $ret = DllCall('kernel32.dll','bool','Wow64DisableWow64FsRedirection','ptr*',0) $srv = "KProcessHacker3" $ph = "ProcessHacker.exe" $title = "[TITLE:Process Hacker]" ; Поиск исполняемого файла $dir = "" if @OSVersion="WIN_2003" or @OSVersion="WIN_XP" or @OSVersion="WIN_XPe" or @OSVersion="WIN_2000" then $sub = "xp" else $sub = @OSArch endif if FileExists(@ScriptDir&"\"&$sub&"\"&$ph) then ; в папке x64, x86 или XP $dir = @ScriptDir & "\" & $sub else emsg("Process Hacker not found!") exit 1 endif ; Завершить уже запущенный ProcessHacker if ProcessExists($ph) then ProcessClose($ph) $cnt = 0 while ProcessExists($ph) ; ждём завершения процесса $cnt += 1 if $cnt > 20 then ; что-то зависло, процесс не завершается слишком долго emsg("Process Hacker not closed!") exit 2 endif Sleep(100) wend endif ; Среда FileChangeDir($dir) $exe = '"' & $dir & "\" & $ph & '"' EnvSet("ProcessHackerStart",@ScriptDir) EnvSet("ProcessHackerDir",$dir) ; Инсталяция драйвера $pid = Run($exe & " -installkph") Sleep(100) if ProcessExists($pid) then ; Если PH запущен, значит висит окно предупреждения ;WinClose("[CLASS:#32770; TITLE:Process Hacker]") ProcessWinClose($pid,$title) $cnt = 0 while ProcessExists($pid) ; ждём завершения процесса $cnt += 1 if $cnt > 20 then ; что-то зависло, процесс не завершается слишком долго emsg("Failed install driver!") exit 3 endif Sleep(100) wend endif ; Рестарт драйвера if _Service_Exists($srv) then _Service_Stop($srv) RegWrite("HKLM\SYSTEM\CurrentControlSet\services\KProcessHacker3\Parameters","SecurityLevel","REG_DWORD",0) ;RegWrite("HKLM\SYSTEM\CurrentControlSet\services\KProcessHacker3","ImagePath","REG_SZ","??\"&$dir&"\kprocesshacker.sys") ; на всякий случай, а то были странности _Service_Start($srv) else ; что-то пошло не так emsg($srv & " not exist!") exit 4 endif ; Запускаем и ждём завершения Process Hacker $pid = RunWait($exe) ; Деинсталяция драйвера $pid = Run($exe & " -uninstallkph") Sleep(100) if ProcessExists($pid) then ; Если PH запущен, значит висит окно предупреждения ;WinClose("[CLASS:#32770; TITLE:Process Hacker]") ProcessWinClose($pid,$title) $cnt = 0 while ProcessExists($pid) ; ждём завершения процесса $cnt += 1 if $cnt > 20 then ; что-то зависло, процесс не завершается слишком долго emsg("Failed uninstall driver!") exit 5 endif Sleep(100) wend endif exit 0 func ProcessWinClose($p,$w) local $i local $list = WinList($w) for $i=1 to $list[0][0] if WinGetProcess($list[$i][1]) = $p then WinClose($list[$i][1]) ProcessClose($p) endif next endfunc func msg($text) MsgBox(0,"PH START",$text) endfunc func emsg($text) MsgBox(16,"PH START",$text) endfunc |