[Урок] Автоматизированное обновление скриптов
|
|
ZeusGang |
Дата: Суббота, 18.06.2016, 14:22 | Сообщение # 1
|
Боец
Сообщений: 100
Статус: Offline
|
Привет, ЧитМастер. Слушай, друг, перед тем как написать в теме "Баян", давай немного подумаем. У нас на портале уже есть даже сервис для автообновления. Но в чем же его минус? А в том, что он просто пересылает нас на страничку скачивания. Наш скрипт будет обновлять себя сам, без помощи юзера, смс и регистрации.
Начнем. Инструкция: 1. Регистрируемся на GitHub`e(неожиданно, правда?), если мы не зарегистрированы. 2. После регистрации, на главное страничке, кликаем на "New repository".
3. Собственно, делаем новый репозиторий, аля как у меня на картинке.
(Кликабельно) 4. Влетаем по ссылке github.com/ВашНик/НазваниеРепо/new/master У меня получилось так:
5. Наш файл называется verlen.ini, и содержит он у нас, такой вот код:
Код [UPD] v=отображаемая версия build=версия, которая будет сравниваться(целое число) des=Описание апдейта upd=Чейнджлог
(Кликабельно) 6. После сохранения загружаем скрипт на github(обязательно в .exe формате), можно загрузить пока что версию без встроенного автообновления, нам нам нужно получить ссылку на скрипт. 7. Заходим в файл на GitHub`e, нам предложат посмотреть Raw, делаем как на картинке.
8. Наконец-то переходим к AHK. Создаем updt.ahk, вставляем код, который ниже, вставляем свою ссылку на raw, и обязательно компилируем его. Полученный updt.exe тоже загружаем на GitHub:
Код updurl := "полученная ссылка" SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nНастраиваем систему обновления. RegRead, put2, HKEY_CURRENT_USER, SoftWare\SAMP, put2 sleep, 5000 SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nСкачиваем обновленную версию. URLDownloadToFile, %updurl%, %put2% SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nЗапускаем обновленную версию. sleep, 3000 Run, % put2 ExitApp 9. Открываем код своего скрипта, вставляем в начало скрипта код, подставляем значения:
Код buildscr = 6 ;версия для сравнения, если меньше чем в verlen.ini - обновляем downlurl := "raw ссылка на updt.exe" downllen := "raw ссылка на verlen.ini"
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
10. Йоу, компилируем скрипт, заменяем его на GitHub`е, распространяем. Как только нужно отправить всем обновление - открываем verlen.ini, меняем описание, версию, чейнджлог, и добавляем единичку к числу build, заливаем новую версию скрипта на GitHub, вместо старой, где тоже добавилась единичка :) Постарался максимально понятно объяснить, это было сложно. На все вопросы в теме отвечу. И, многим, наверное, интересно - почему GitHub? - Да потому что он очень редко падает, а php скрипты тут не нужны, так намного быстрее и приятнее работать. Спасибо за чтение урока, удачи!
Сообщение отредактировал ZeusGang - Воскресенье, 19.06.2016, 19:09 |
|
|
|
[CM]BrainMan |
Дата: Среда, 22.06.2016, 23:31 | Сообщение # 2
|
AutoHotKey Coder
Сообщений: 162
Статус: Offline
|
Я так всегда и делал. Я просто не понимаю как юзать систему автообновлений от чит мастера.
Автоматические доклады в рацию: http://cheat-master.ru/forum/150-596144-1
|
|
|
|
tumkin |
Дата: Четверг, 23.06.2016, 15:13 | Сообщение # 3
|
Tumkin Project
Сообщений: 1186
Статус: Offline
|
Код updurl := "полученная ссылка" SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nНастраиваем систему обновления. RegRead, put2, HKEY_CURRENT_USER, SoftWare\SAMP, put2 sleep, 5000 SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nСкачиваем обновленную версию. URLDownloadToFile, %updurl%, %put2% SplashTextOn, , 60,Автообновление, Обновление. Ожидайте..`nЗапускаем обновленную версию. sleep, 3000 Run, % put2 ExitApp
Зачем тут задержки? Чем быстрее работает - тем лучше (ИМХО)
|
|
|
|
ZeusGang |
Дата: Четверг, 23.06.2016, 17:31 | Сообщение # 4
|
Боец
Сообщений: 100
Статус: Offline
|
tumkin, я любитель красивых речей :D Не, серьезно, это же можно подредактировать под себя, но мне нравится сам процесс, как люди видят работу скрипта. Иногда для того чтобы скрипт выглядел крутым - нужно больше воды.
|
|
|
|
McFree_ |
Дата: Воскресенье, 26.06.2016, 13:07 | Сообщение # 5
|
В рядах СМ.
Сообщений: 321
Статус: Offline
|
Я вообще через PHP все делаю :D Хотел как раз разобраться как на Git заливать все, теперь понял. Спасибо =)
Помогаю новичкам! По всем вопросам в ЛС!
Сообщение отредактировал McFree_ - Воскресенье, 26.06.2016, 13:17 |
|
|
|
ZeusGang |
Дата: Понедельник, 04.07.2016, 17:23 | Сообщение # 6
|
Боец
Сообщений: 100
Статус: Offline
|
Ввввверхххх
|
|
|
|
Iomaha |
Дата: Суббота, 16.07.2016, 22:54 | Сообщение # 7
|
Авторитет
Сообщений: 1422
Статус: Offline
|
Пацан боже снимай роли на YT спасибо помог я затупил с UPDT а так всё хорошо молодец.
Loading Cyan
|
|
|
|
BetaJIon |
Дата: Воскресенье, 17.07.2016, 23:53 | Сообщение # 8
|
Новичок
Сообщений: 25
Статус: Offline
|
У меня проблема. Я когда обновляю биндер, то тому, кто запустил старую версию и согласился её обновить выдаёт ошибку, типо не удаётся запустить % put2 Что делать?
|
|
|
|
shop_i228 |
Дата: Четверг, 21.07.2016, 08:45 | Сообщение # 9
|
Сообщений: 265
Статус: Offline
|
Сам по себе скрипт ненужный) Сделай лучше интереный биндер в фраку
|
|
|
|
_Queenie_ |
Дата: Среда, 10.08.2016, 19:42 | Сообщение # 10
|
Новичок
Сообщений: 16
Статус: Offline
|
Цитата BetaJIon ( ) У меня проблема. Я когда обновляю биндер, то тому, кто запустил старую версию и согласился её обновить выдаёт ошибку, типо не удаётся запустить % put2 Что делать? Значит вы где-то допустили ошибку! У меня была такая-же проблема, я просто перепроверил код, исправил ошибки и всё заработало.
|
|
|
|
McFree_ |
Дата: Четверг, 11.08.2016, 06:22 | Сообщение # 11
|
В рядах СМ.
Сообщений: 321
Статус: Offline
|
BetaJIon, перечитай внимательно тему и сверь со своим кодом
Помогаю новичкам! По всем вопросам в ЛС!
|
|
|
|
MrGPro |
Дата: Четверг, 01.09.2016, 22:16 | Сообщение # 12
|
Боец
Сообщений: 202
Статус: Offline
|
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
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
|
|
|
|
RoffDaniel |
Дата: Понедельник, 08.05.2017, 08:24 | Сообщение # 13
|
Новичок
Сообщений: 3
Статус: Offline
|
Привет. Можешь пожалуйста рассказать, как сделать что бы можно было обновлять через свой сервер? Заранее спасибо!
|
|
|
|
[Avicii] |
Дата: Понедельник, 08.05.2017, 09:41 | Сообщение # 14
|
Легенда
Сообщений: 1514
Статус: Offline
|
Цитата Iomaha ( ) Пацан боже снимай роли на YT спасибо помог я затупил с UPDT а так всё хорошо молодец.
Запятые друг, запятые.
|
|
|
|
Kaktus007 |
Дата: Понедельник, 08.05.2017, 11:54 | Сообщение # 15
|
Боец
Сообщений: 70
Статус: Offline
|
Цитата как сделать что бы можно было обновлять через свой сервер? Точно также, как и здесь. Другой вопрос, что ты и эту систему не понял.
1. Основной скрипт чекает текстовик на твоём сервере и сравнивает указанную там версию со своей 2. Если на сервере версия новее, скачивает экзешник новый по ранее заданному не-изменяемому адресу
Пункт 2 выполняется либо отдельным скриптом-обновлятором, либо основным скриптом с последующим завершением обновления через командную строку (удаление старого скрипта, перемещение на его место нового, запуск)
|
|
|
|