[Урок] Автоматизированное обновление скриптов
|
|
[CM]Coockie |
Дата: Понедельник, 08.05.2017, 14:07 | Сообщение # 16
|
developer
Сообщений: 67
Статус: Offline
|
MrGPro,
Код FileRead, find404, %ScriptDir%/LST_Version.ini ; проверяем файл на строку 404 IfInString, find404, 404
Дальше читать даже не стал, у большинства нормальных сервисов стоят редиректы на ошибки Apache, а если где-то еще будет цифра 404 и самой ошибки не будет? Проще сделать в JSON виде обмен информацией
|
|
|
|
NiceShot1337 |
Дата: Понедельник, 18.06.2018, 17:20 | Сообщение # 17
|
Новичок
Сообщений: 1
Статус: Offline
|
Код Utf8ToAnsi(ByRef Utf8String, CodePage = 1251) { If (NumGet(Utf8String) & 0xFFFFFF) = 0xBFBBEF BOM = 3 Else BOM = 0
UniSize := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "Int", 0, "Int", 0) VarSetCapacity(UniBuf, UniSize * 2) DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "UInt", &UniBuf, "Int", UniSize)
AnsiSize := DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Int", 0, "Int", 0 , "Int", 0, "Int", 0) VarSetCapacity(AnsiString, AnsiSize) DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Str", AnsiString, "Int", AnsiSize , "Int", 0, "Int", 0) Return AnsiString } WM_HELP(){ IniRead, vupd, %a_temp%/verlen.ini, UPD, v IniRead, desupd, %a_temp%/verlen.ini, UPD, des desupd := Utf8ToAnsi(desupd) IniRead, updupd, %a_temp%/verlen.ini, UPD, upd updupd := Utf8ToAnsi(updupd) msgbox, , Список изменений версии %vupd%, %updupd% return }
OnMessage(0x53, "WM_HELP") Gui +OwnDialogs
SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nПроверяем наличие обновлений. URLDownloadToFile, %downllen%, %a_temp%/verlen.ini IniRead, buildupd, %a_temp%/verlen.ini, UPD, build if buildupd = { SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nОшибка. Нет связи с сервером. sleep, 2000 } if buildupd > % buildscr { IniRead, vupd, %a_temp%/verlen.ini, UPD, v SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nОбнаружено обновление до версии %vupd%! sleep, 2000 IniRead, desupd, %a_temp%/verlen.ini, UPD, des desupd := Utf8ToAnsi(desupd) IniRead, updupd, %a_temp%/verlen.ini, UPD, upd updupd := Utf8ToAnsi(updupd) SplashTextoff msgbox, 16384, Обновление скрипта до версии %vupd%, %desupd% IfMsgBox OK { msgbox, 1, Обновление скрипта до версии %vupd%, Хотите ли Вы обновиться? IfMsgBox OK { put2 := % A_ScriptFullPath RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,put2 , % put2 SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nОбновляем скрипт до версии %vupd%! URLDownloadToFile, %downlurl%, %a_temp%/updt.exe sleep, 1000 run, %a_temp%/updt.exe exitapp } } } SplashTextoff (13) : ==> Duplicate function definition. 13 строка это Utf8ToAnsi(ByRef Utf8String, CodePage = 1251) Как исправить?
|
|
|
|
Salamakeykum |
Дата: Понедельник, 18.06.2018, 21:40 | Сообщение # 18
|
salam bratka
Сообщений: 378
Статус: Offline
|
Цитата [Avicii] ( ) Запятые друг Забыл запятую при обращении
Помогу с AHK чем смогу VK Мои темы: CNN Helper Fast AirDrop autoMechanic Fake Общак ARZ Счетчик денег для таксистов
|
|
|
|
ZeusGang |
Дата: Понедельник, 18.06.2018, 23:35 | Сообщение # 19
|
Боец
Сообщений: 100
Статус: Offline
|
NiceShot1337, в коде два раза используется функция. Во так должно работать:
Цитата Utf8ToAnsi1(ByRef Utf8String, CodePage = 1251) { If (NumGet(Utf8String) & 0xFFFFFF) = 0xBFBBEF BOM = 3 Else BOM = 0
UniSize := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "Int", 0, "Int", 0) VarSetCapacity(UniBuf, UniSize * 2) DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "UInt", &UniBuf, "Int", UniSize)
AnsiSize := DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Int", 0, "Int", 0 , "Int", 0, "Int", 0) VarSetCapacity(AnsiString, AnsiSize) DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Str", AnsiString, "Int", AnsiSize , "Int", 0, "Int", 0) Return AnsiString } WM_HELP(){ IniRead, vupd, %a_temp%/verlen.ini, UPD, v IniRead, desupd, %a_temp%/verlen.ini, UPD, des desupd := Utf8ToAnsi1(desupd) IniRead, updupd, %a_temp%/verlen.ini, UPD, upd updupd := Utf8ToAnsi1(updupd) msgbox, , Список изменений версии %vupd%, %updupd% return }
OnMessage(0x53, "WM_HELP") Gui +OwnDialogs
SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nПроверяем наличие обновлений. URLDownloadToFile, %downllen%, %a_temp%/verlen.ini IniRead, buildupd, %a_temp%/verlen.ini, UPD, build if buildupd = { SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nОшибка. Нет связи с сервером. sleep, 2000 } if buildupd > % buildscr { IniRead, vupd, %a_temp%/verlen.ini, UPD, v SplashTextOn, , 60,Автообновление, Запуск скрипта. Ожидайте..`nОбнаружено обновление до версии %vupd%! sleep, 2000 IniRead, desupd, %a_temp%/verlen.ini, UPD, des desupd := Utf8ToAnsi1(desupd) IniRead, updupd, %a_temp%/verlen.ini, UPD, upd updupd := Utf8ToAnsi1(updupd) SplashTextoff msgbox, 16384, Обновление скрипта до версии %vupd%, %desupd% IfMsgBox OK { msgbox, 1, Обновление скрипта до версии %vupd%, Хотите ли Вы обновиться? IfMsgBox OK { put2 := % A_ScriptFullPath RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,put2 , % put2 SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nОбновляем скрипт до версии %vupd%! URLDownloadToFile, %downlurl%, %a_temp%/updt.exe sleep, 1000 run, %a_temp%/updt.exe exitapp } } } SplashTextoff
|
|
|
|
Alikkuc |
Дата: Среда, 09.01.2019, 17:40 | Сообщение # 20
|
Новичок
Сообщений: 19
Статус: Offline
|
Ребят, у меня бесконечно идет. Сначала скрипт устанавливается новый, но потом он бесконечно строчит мне о том что вышло новое объявление.
|
|
|
|
Salamakeykum |
Дата: Пятница, 11.01.2019, 13:03 | Сообщение # 21
|
salam bratka
Сообщений: 378
Статус: Offline
|
Цитата Alikkuc ( ) бесконечно строчит мне о том что вышло новое объявление. SplashTextOff попробуй
Помогу с AHK чем смогу VK Мои темы: CNN Helper Fast AirDrop autoMechanic Fake Общак ARZ Счетчик денег для таксистов
|
|
|
|
Alikkuc |
Дата: Суббота, 12.01.2019, 19:40 | Сообщение # 22
|
Новичок
Сообщений: 19
Статус: Offline
|
Цитата Salamakeykum ( ) SplashTextOff попробуй
и в скрипте и в updt.exe пробывал ничего не помогаетДобавлено (15.01.2019, 13:49) --------------------------------------------- ну кто то мне поможет нет, я не могу сделать у меня бесконечно открывается о том что 'доступно обновление '
|
|
|
|
Salamakeykum |
Дата: Вторник, 15.01.2019, 19:19 | Сообщение # 23
|
salam bratka
Сообщений: 378
Статус: Offline
|
Цитата Alikkuc ( ) доступно обновление Проблема может быть какая угодно, никто не видел твоего кода, может с загрузкой файла ошибка..
Помогу с AHK чем смогу VK Мои темы: CNN Helper Fast AirDrop autoMechanic Fake Общак ARZ Счетчик денег для таксистов
|
|
|
|
ZeusGang |
Дата: Вторник, 23.07.2019, 23:41 | Сообщение # 24
|
Боец
Сообщений: 100
Статус: Offline
|
Alikkuc, цифры проверь или ифки, проблема скорее всего там
|
|
|
|
Lisov212441 |
Дата: Суббота, 27.08.2022, 17:43 | Сообщение # 25
|
Новичок
Сообщений: 1
Статус: Offline
|
Здравствуйте, сделал все как в инструкции. Но выскакивает ошибка
Сообщение отредактировал Lisov212441 - Суббота, 27.08.2022, 17:45 |
|
|
|
Sakurai |
Дата: Вторник, 25.10.2022, 15:11 | Сообщение # 26
|
Новичок
Сообщений: 1
Статус: Offline
|
Цитата MrGPro ( ) https://raw.githubusercontent.com/MrGPro....ion.ini
Модифицированный код на основе данного
Код
global ScriptVersion, ScriptVersion = "0.0.9" ; Версия данного скрипта global UrlServerInfo, UrlServerInfo = "https://raw.githubusercontent.com/MrGPro/TestUpdate/master/LST_Version.ini" ; Ссылка на файл с версией, ссылкой на файл, описанием, и лог изменений ScriptDir := A_ScriptDir
Utf8ToAnsi(ByRef Utf8String, CodePage = 1251) { If (NumGet(Utf8String) & 0xFFFFFF) = 0xBFBBEF BOM = 3 Else BOM = 0
UniSize := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "Int", 0, "Int", 0) VarSetCapacity(UniBuf, UniSize * 2) DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0 , "UInt", &Utf8String + BOM, "Int", -1 , "UInt", &UniBuf, "Int", UniSize)
AnsiSize := DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Int", 0, "Int", 0 , "Int", 0, "Int", 0) VarSetCapacity(AnsiString, AnsiSize) DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0 , "UInt", &UniBuf, "Int", -1 , "Str", AnsiString, "Int", AnsiSize , "Int", 0, "Int", 0) Return AnsiString }
ConnectedToInternet(flag=0x40) ; интернет коннектор статус сети { Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0) }
if ConnectedToInternet() ; есть подключение к сети { SplashTextOn, , 60, Менеджер обновлений, Проверка обновления`n------------------------`nОжидайте URLDownloadToFile, %UrlServerInfo%, %ScriptDir%/LST_Version.ini FileRead, find404, %ScriptDir%/LST_Version.ini ; проверяем файл на строку 404 IfInString, find404, 404 { FileServer := False ; файл настроек не верный } else { FileServer := True ; файл настроек верный IniRead, f_LastVersion, %ScriptDir%/LST_Version.ini, Script, Last_Version IniRead, f_LastDescription, %ScriptDir%/LST_Version.ini, Script, Last_Description IniRead, f_LastChangLog, %ScriptDir%/LST_Version.ini, Script, Last_Changlog If (f_LastChangLog != Null) ; если ссылка на файл лога не пуста { URLDownloadToFile, %f_LastChangLog%, %ScriptDir%/Chatlog.txt ; скачиваем файл лога FileRead, f_ChatlogText, %ScriptDir%/Chatlog.txt ; читаем файл лога conv_MsgChangLog := Utf8ToAnsi(f_ChatlogText) ; конвертируем кодировку If (conv_MsgChangLog == "ERROR") ; если файл пустой { FormChatLogLoad := ; записываем пустоту в форму } else { FormChatLogLoad := conv_MsgChangLog ; записываем текст с файла в форму } } } if (FileServer == False) ; если в файле есть 404 { SplashTextOn, , 60, Менеджер обновлений, Ошибка подключения`n------------------------`nНет связи с сервером sleep, 2000 SplashTextoff goto, Script } else if (f_LastVersion > ScriptVersion and f_LastVersion != Null) ; версия больше и последняя версия не равна пустоте { SplashTextOn, , 60, Менеджер обновлений, Ожидайте`n------------------------`nОбнаружена версия %f_LastVersion% sleep, 2000 SplashTextoff IniRead, f_LastChangLog, %ScriptDir%/LST_Version.ini, Script, Last_Changlog ; удаляем иконку с формы Gui +LastFound DllCall("uxtheme\SetWindowThemeAttribute", "ptr", WinExist() , "int", 1, "int64*", 6 | 6<<32, "uint", 8) ; загружаем форму Gui, Update:Color, FFFFFF Gui, Update:-MinimizeBox Gui, Update:Add, TreeView, x240 y375 w240 h84, Gui, Update:Add, Edit, x10 y10 w480 h240 ReadOnly, %FormChatLogLoad% Gui, Update:Add, Button, x90 y260 w125 h30 gUpdate, Обновить Gui, Update:Add, Button, x285 y260 w125 h30 gUpdateGuiClose, Отмена Gui, Update:Show, w500 h300, Доступно обновление %ScriptVersion% до %f_LastVersion% return } } else ; нет доступа к интернету { MsgBox, 48, Менеджер обновлений, Доступ к интернету не обнаружен`n-----------------------------------------`nПроверьте своё интернет соединение goto, Script }
; запускаем обновление по тыку кнопки обновить Update: IniRead, f_LastDownload, %ScriptDir%/LST_Version.ini, Script, Last_Download IniRead, f_FileName, %ScriptDir%/LST_Version.ini, Script, Last_Name msgbox, 1, Обновление до %f_LastVersion%, Хотите ли Вы обновиться? IfMsgBox, OK { SplashTextOn, , 60 ,Менеджер обновлений, Ожидайте`n------------------------`nОбновляем до %f_LastVersion% sleep, 1000 SplashTextOn, , 60,Менеджер обновлений, Ожидайте`n------------------------`nСкачиваем обновление URLDownloadToFile, %f_LastDownload%, %ScriptDir%/%f_FileName% sleep, 1000 SplashTextOn, , 60,Менеджер обновлений, Ожидайте`n------------------------`nЗапускаем скрипт sleep, 3000 run, %ScriptDir%/%f_FileName% ExitApp } IfMsgBox, CANCEL { Gui, Update:Destroy ; удаляем форму обновления goto, Script } return
UpdateGuiClose: Gui, Update:Destroy goto, Script return
; ваш скрипт Script: MsgBox, Скрипт запущен ExitApp
Я взял твой код и у меня ошибка а в чем проблема хз скрин
|
|
|
|
MrGProv2 |
Дата: Среда, 29.03.2023, 23:39 | Сообщение # 27
|
Новичок
Сообщений: 1
Статус: Offline
|
Код global ScriptVersion = "0.0.9" ; Версия данного скрипта global UrlServerInfo = "https://raw.githubusercontent.com/MrGProv2/AhkUpdaterv2Fix/main/update.json" ; Ссылка на файл с версией, ссылкой на файл, описанием, и лог изменений global info = [] ; массив для глобального использывания
; функция ппроверки интернет-соединения ConnectedToInternet(flag=0x40) ; интернет коннектор статус сети { Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0) }
; функция для работы с json структурами Json(i) { ;ENCODE if (isobject(i)) { o := "", a := 1, x := 1 for k,v in i { if (k!=x) a := 0, break x += 1 } o .= (a) ? "[" : "{", f := 1 for k,v in i o .= ((f) ? "" : ",")((a) ? "" : """" k """:")((isobject(v)) ? json(v) : ((v+0=v) ? v : """" v """")), f := 0 return o ((a) ? "]" : "}") } ;DECODE if (regexmatch(i, "s)^__chr(A|W):(.*)", m)) { VarSetCapacity(b, 4, 0), NumPut(m2, b, 0, "int") return StrGet(&b, 1, (m1="A") ? "cp28591" : "utf-16") } if (regexmatch(i, "s)^__str:((\\""|[^""])*)", m)) { str := m1 for p,r in {b:"`b", f:"`f", n:"`n", 0:"", r:"`r", t:"`t", v:"`v", "'":"'", """":"""", "/":"/"} str := regexreplace(str, "\\" p, r) while (regexmatch(str, "s)^(.*?)\\x([0-9a-fA-F]{2})(.*)", m)) str := m1 json("__chrA:0x" m2) m3 while (regexmatch(str, "s)^(.*?)\\u([0-9a-fA-F]{4})(.*)", m)) str := m1 json("__chrW:0x" m2) m3 while (regexmatch(str, "s)^(.*?)\\([0-9]{1,3})(.*)", m)) str := m1 json("__chrA:" m2) m3 return regexreplace(str, "\\\\", "\") } str := [], obj := [] while (RegExMatch(i, "s)^(.*?[^\\])""((\\""|[^""])*?[^\\]|)""(.*)$", m)) str.insert(json("__str:" m2)), i := m1 "__str<" str.maxIndex() ">" m4 while (RegExMatch(RegExReplace(i, "\s+", ""), "s)^(.*?)(\{|\[)([^\{\[\]\}]*?)(\}|\])(.*)$", m)) { a := (m2="{") ? 0 : 1, c := m3, i := m1 "__obj<" ((obj.maxIndex()+1) ? obj.maxIndex()+1 : 1) ">" m5, tmp := [] while (RegExMatch(c, "^(.*?),(.*)$", m)) tmp.insert(m1), c := m2 tmp.insert(c), tmp2 := {}, obj.insert(cobj := {}) for k,v in tmp { if (RegExMatch(v, "^(.*?):(.*)$", m)) tmp2[m1] := m2 else tmp2.insert(v) } for k,v in tmp2 { for x,y in str k := RegExReplace(k, "__str<" x ">", y), v := RegExReplace(v, "__str<" x ">", y) for x,y in obj v := RegExMatch(v, "^__obj<" x ">$") ? y : v cobj[k] := v } } return obj[obj.maxIndex()] }
; упрощённая функция запроса по http/https Http(ByRef URL, COM = "GET") { WinHTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1") WinHTTP.Open(COM, URL, false) WinHTTP.Send() return % WinHTTP.ResponseText }
; функция инициализации интерфейса обловлятора Update_FORM(ByRef Version = "", ByRef Description = "") { Gui, Update:+LastFound -SysMenu Gui, Update:Color, FFFFFF Gui, Update:-MinimizeBox Gui, Update:Add, TreeView, x240 y375 w240 h84, Gui, Update:Add, Edit, x10 y10 w480 h240 ReadOnly, %Description% Gui, Update:Add, Button, x90 y260 w125 h30 gUpdate, Обновить Gui, Update:Add, Button, x285 y260 w125 h30 gUpdateGuiClose, Отмена Gui, Update:Show, w500 h300, > Доступно обновление %ScriptVersion% до %Version% }
Check_Update: if ConnectedToInternet() ; есть подключение к сети { SplashTextOn, , 60, Менеджер обновлений, % "Проверка обновления" . "`n" . "Ожидайте" ; информер процесса sleep, 2000 info := Json(Http(UrlServerInfo)) ; получаем данные с файла if (info["version"] > ScriptVersion) ; найдена новая версия { Descript_text := % Http(info["changelog_url"]) != "" ? Http(info["changelog_url"]) : "" ; заполняем описание в переменную через тернар при услови что не пустое SplashTextOn, , 60, Менеджер обновлений, % "Обнаружено обновление" . "`n" . "версия: " . info["version"] ; информер процесса sleep, 2000 SplashTextoff Update_FORM(ver, Descript_text) ; инициализируем интерфейс обновлятора } } else ; нет доступа к интернету { MsgBox, 48, Менеджер обновлений, % "Доступ к интернету не обнаружен" . "`n" . "Проверьте своё интернет соединение" goto, Script } return
; запускаем обновление по тыку кнопки обновить Update: Msgbox, 1, % "Обновление до " . info["version"], Вы желаете выполнить обновление? IfMsgBox, OK {
SplashTextOn, , 60 ,Менеджер обновлений, % "Ожидайте" . "`n" . "Обновляем до " . info["version"] ; информер процесса sleep, 1000 SplashTextOn, , 60, Менеджер обновлений, % "Ожидайте" . "`n" . "Скачиваю обновление " . info["version"] ; информер процесса URLDownloadToFile, % info["download_url"], % A_ScriptDir . "/" . info["file_exe"] . ".zip" ; загружаем исключительно zip архив и переименовываем его в имя исполнительного файла без exe IfExist, % A_ScriptDir . "/" . info["file_exe"] . ".zip" ; проверяем загружен файл или нет { SplashTextOn, , 60, Менеджер обновлений, % "Ожидайте" . "`n" . "Распаковка обновления " . info["version"] ; информер процесса ; выполняем распаковку архива в каталог текущего скрипта Shell := ComObjCreate("Shell.Application") Items := Shell.NameSpace(A_ScriptDir . "\" . info["file_exe"] . ".zip") Shell.NameSpace(A_ScriptDir).CopyHere(Items.items, 4|16) } else { MsgBox, 48, Менеджер обновлений, % "Обновление не было загружено" . "`n" ."Проверьте своё интернет соединение или сообщите разработчику" ; информер процесса goto, Script } } sleep, 2000 SplashTextOn, , 60,Менеджер обновлений, % "Ожидайте" . "`n" . "Запускаю обновлённый " . "`n" . info["file_exe"] . ".exe" ; информер процесса sleep, 3000 run, % A_ScriptDir . "\" . info["file_exe"] ; запускаем файл после обновления ExitApp
} IfMsgBox, CANCEL { Gui, Update:Destroy ; удаляем форму обновления goto, Script } return
UpdateGuiClose: Gui, Update:Destroy goto, Script return
; ваш тело скрипта или запуск типа run Script: MsgBox, Скрипт запущен ExitApp
|
|
|
|