[Урок] Автоматизированное обновление скриптов - Форум Cheat-Master.ru
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
Форум » Программирование » AHK Программирование » [Урок] Автоматизированное обновление скриптов (Полностью автоматическое обновление)
[Урок] Автоматизированное обновление скриптов
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
SAMP SHOP
Сообщений: 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
Цитата
как сделать что бы можно было обновлять через свой сервер?

Точно также, как и здесь. Другой вопрос, что ты и эту систему не понял. wink

1. Основной скрипт чекает текстовик на твоём сервере и сравнивает указанную там версию со своей
2. Если на сервере версия новее, скачивает экзешник новый по ранее заданному не-изменяемому адресу

Пункт 2 выполняется либо отдельным скриптом-обновлятором, либо основным скриптом с последующим завершением обновления через командную строку (удаление старого скрипта, перемещение на его место нового, запуск)
Форум » Программирование » AHK Программирование » [Урок] Автоматизированное обновление скриптов (Полностью автоматическое обновление)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7209]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
stephensh5 [12:00]

calliesv7 [06:11]

louqm16 [22:14]

artushak [16:32]

Kingpolker [15:42]

leeyv11 [15:12]

Trappa17 [01:00]

Djamalchik [16:40]

ajeense [14:24]

654470559 [08:55]

Newtone [03:01]

godspeed [21:31]

herminiadb10 [13:43]