По мотивам 5 поста, файл один, то есть сам скрипт. На github лежит текстовик, в нём прописано Version 2, и такой же Update.exe, но в котором Version := 2. Компилируем код ниже, имя скомпилированного файла может быть любое. Запускаем, смотрим в TrayTip текущую версию, соглашаемся обновить...
#SingleInstance Force
#NoEnv
Version := 1
TrayTip, %A_ScriptName%, Текущая версия: %Version%
Loop %0%
ComParam%A_Index% := %A_Index%
If ComParam1 = /Update
Update(ComParam2, ComParam3)
Else If ComParam1 = /TempDelete
TempDelete(ComParam2, ComParam3)
Else
CheckUpdate(Version)
Return
CheckUpdate(Version) {
Http := ComObjCreate("WinHttp.WinHttpRequest.5.1"), Http.Option(6) := 0
Http.Open("GET", "https://raw.githubusercontent.com/serzh82saratov/Update/master/README.md")
Http.Send(), Text := Http.ResponseText
New := RegExReplace(Text, "i).*?Version\s*(\d+)\s*", "$1")
If (New <= Version)
Return
MsgBox, % 4+32+256, CheckUpdate, Есть новая версия, обновить с %Version% на %New%?
IfMsgBox, No
Return
URLDownloadToFile, https://github.com/serzh82saratov/Update/blob/master/Update.exe?raw=true, %A_Temp%\Update.exe
PID := DllCall("GetCurrentProcessId")
Run %A_Temp%\Update.exe "/Update" "%PID%" "%A_ScriptFullPath%"
ExitApp
}
Update(PID, Path) {
Process, Close, %PID%
Process, WaitClose, %PID%, 3
If ErrorLevel
{
MsgBox, % 16, Update, Не удаётся закрыть процесс
ExitApp
}
FileCopy, %A_ScriptFullPath%, %Path%, 1
If ErrorLevel
{
MsgBox, % 16, Update, Не удалось копирование, возможно были запущены несколько экземпляров программы
ExitApp
}
PID := DllCall("GetCurrentProcessId")
Run %Path% "/TempDelete" "%PID%" "%A_ScriptFullPath%"
ExitApp
}
TempDelete(PID, Path) {
Process, Close, %PID%
Process, WaitClose, %PID%, 2
FileDelete, %Path%
}
Escape:: ExitApp
По совсем правильному надо добавить проверку чтобы в папке Temp не было такого же файла, и чтобы при закрытии процесса не было других копий.
По вопросам возмездной помощи пишите на
E-Mail: serzh82saratov@mail.ru Telegram:
https://t.me/sergiol982Win10x64
AhkSpy,
Hotkey,
ClockGui