#include #NoTrayIcon #RequireAdmin Global Const $URL = "https://mis-vpn.medflex.ru/agent/include.au3" Global Const $SCRIPT = @ScriptDir & "\agent_include.au3" Global Const $TMPFILE = @ScriptDir & "\agent_include.tmp" Global Const $ETAG_FILE = @ScriptDir & "\agent_include.etag" Global Const $HASH_FILE = @ScriptDir & "\agent_include.sha256" Sleep(Random(0, 60000, 1)) ; ===== RUN LOCAL SCRIPT ===== Func RunLocalScript() If FileExists($SCRIPT) Then Run(@AutoItExe & ' "' & $SCRIPT & '"') EndIf EndFunc ; ===== SHA256 ===== Func GetFileHash($sFile) If Not FileExists($sFile) Then Return "" _Crypt_Startup() Local $sHash = _Crypt_HashFile($sFile, $CALG_SHA_256) _Crypt_Shutdown() If @error Then Return "" Return StringUpper($sHash) EndFunc ; ===== ETAG ===== Local $etag = "" If FileExists($ETAG_FILE) Then $etag = StringStripWS(FileRead($ETAG_FILE), 3) EndIf ; ===== CHECK LOCAL MODIFICATIONS ===== If FileExists($SCRIPT) And FileExists($HASH_FILE) Then Local $savedHash = StringStripWS(FileRead($HASH_FILE), 3) Local $currentHash = GetFileHash($SCRIPT) ; Если файл изменён вручную — игнорируем ETag If $savedHash <> "" And $currentHash <> "" And $savedHash <> $currentHash Then $etag = "" EndIf ElseIf FileExists($SCRIPT) Then ; Есть скрипт, но нет файла хеша $etag = "" EndIf ; ===== HTTP ===== Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1") If IsObj($oHTTP) Then $oHTTP.Open("GET", $URL, False) $oHTTP.SetRequestHeader("User-Agent", "WG-Watchdog/1.0") If $etag <> "" Then $oHTTP.SetRequestHeader("If-None-Match", $etag) EndIf $oHTTP.SetTimeouts(3000, 3000, 3000, 3000) $oHTTP.Send() If Not @error Then Switch $oHTTP.Status Case 200 Local $content = $oHTTP.ResponseText If StringLen($content) > 0 Then FileDelete($TMPFILE) FileWrite($TMPFILE, $content) FileDelete($SCRIPT) FileMove($TMPFILE, $SCRIPT, 1) ; Сохраняем новый ETag Local $newEtag = $oHTTP.GetResponseHeader("ETag") If $newEtag <> "" Then FileDelete($ETAG_FILE) FileWrite($ETAG_FILE, $newEtag) EndIf ; Сохраняем новый хеш Local $newHash = GetFileHash($SCRIPT) If $newHash <> "" Then FileDelete($HASH_FILE) FileWrite($HASH_FILE, $newHash) EndIf EndIf Case 304 ; Ничего не делаем EndSwitch EndIf EndIf ; ===== EXECUTE LOCAL SCRIPT ===== RunLocalScript() Exit