Код:
; #FUNCTION# ==============================================================================================================
; Name...........: LIVEUPDATE
; Description ...: Функция для начала обновления программы.
; Syntax.........: LIVEUPDATE($IURL, $IPATCH, $PATCH, $IFON)
; Parameters ....: $IURL - Ссылка на проверяемый файл на хостинге.
; $IPATCH - Расположение файла проверяемого и который требует обновления.
; $PATCH - Расположения файла загруки.
; $IFON - Ожидать или нет, завершения обновления.Стандартное значение 1 (скрытый режим)
;
; Return values .: Возвращает 1 если требуется обновление, 0 если не трубуется.
; Author ........: Arei(Jl-Creations)
; =========================================================================================================================
Func LIVEUPDATE($IURL, $IPATCH, $PATCH, $IFON = 1)
FileDelete($PATCH)
$READFILE = FileGetSize($IPATCH)
$READFILEINET = InetGetSize($IURL)
If $READFILE <> $READFILEINET Then
InetGet($IURL, $PATCH, 1, $IFON)
If StringRight(@ScriptFullPath, 3) <> "au3" Then
$STEMP = _TEMPFILE(@TempDir, "~", ".bat")
$SPATH = FileGetShortName(@ScriptFullPath)
$HFILE = FileOpen($STEMP, 2)
FileWriteLine($HFILE, "@echo off")
FileWriteLine($HFILE, ":loop")
FileWriteLine($HFILE, "del " & $SPATH)
FileWriteLine($HFILE, "if exist " & $SPATH & " goto loop")
FileWriteLine($HFILE, "del " & $STEMP)
FileClose($HFILE)
Run($STEMP, "", @SW_HIDE)
EndIf
Return 1
EndIf
Return 0
EndFunc ;==>LIVEUPDATE
; #FUNCTION# ==============================================================================================================
; Name...........: LIVEUPDATEEXIT
; Description ...: Функция для завершения обновления программы .Используется во время завершения скрипта.
; Syntax.........: LIVEUPDATEEXIT($OUTPATCH)
; Parameters ....: $OUTPATCH - Место расположения файла загруженного..
; Return values .: Ничего не возвращает
; Author ........: Arei(Jl-Creations)
; =========================================================================================================================
Func LIVEUPDATEEXIT($OUTPATCH)
If $Online = 1 Then
FileWrite(@TempDir & "\tim.bat", "ping -n 2 127.0.0.1 > NUL" & @CRLF & " move " & $OUTPATCH & " " & @ScriptFullPath& "")
ShellExecute("tim.bat", "", @TempDir, "open", @SW_HIDE)
EndIf
Exit
EndFunc ;==>LIVEUPDATEEXIT
Пример
Пример сделан на скорую руку, 1 раз окно создаётся с сообщением, после обновления сообщения не будет.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
$FORM1 = GUICreate("Проверка", 371, 158, 192, 124)
$INPUT1 = GUICtrlCreateInput("", 64, 32, 121, 21)
$BUTTON1 = GUICtrlCreateButton("Просто", 72, 80, 75, 25)
$IURL = "http://arei91.narod2.ru/22.exe"
$IPATCH= @ScriptFullPath
$PATCH=@TempDir & "\" & "1.exe"
$Online =LIVEUPDATE($IURL, $IPATCH, $PATCH)
GUISetState(@SW_SHOW)
MsgBox("","",1)
#endregion ### START Koda GUI section ### Form=
While 1
$NMSG = GUIGetMsg()
Switch $NMSG
Case $GUI_EVENT_CLOSE
LIVEUPDATEEXIT($PATCH)
EndSwitch
WEnd
Func LIVEUPDATE($IURL, $IPATCH, $PATCH, $IFON = 1)
FileDelete($PATCH)
$READFILE = FileGetSize($IPATCH)
$READFILEINET = InetGetSize($IURL)
If $READFILE <> $READFILEINET Then
InetGet($IURL, $PATCH, 1, $IFON)
If StringRight(@ScriptFullPath, 3) <> "au3" Then
$STEMP = _TEMPFILE(@TempDir, "~", ".bat")
$SPATH = FileGetShortName(@ScriptFullPath)
$HFILE = FileOpen($STEMP, 2)
FileWriteLine($HFILE, "@echo off")
FileWriteLine($HFILE, ":loop")
FileWriteLine($HFILE, "del " & $SPATH)
FileWriteLine($HFILE, "if exist " & $SPATH & " goto loop")
FileWriteLine($HFILE, "del " & $STEMP)
FileClose($HFILE)
Run($STEMP, "", @SW_HIDE)
EndIf
Return 1
EndIf
Return 0
EndFunc ;==>LIVEUPDATE
Func LIVEUPDATEEXIT($OUTPATCH)
If $Online = 1 Then
FileWrite(@TempDir & "\tim.bat", "ping -n 2 127.0.0.1 > NUL" & @CRLF & " move " & $OUTPATCH & " " & @ScriptFullPath& "")
ShellExecute("tim.bat", "", @TempDir, "open", @SW_HIDE)
EndIf
Exit
EndFunc ;==>LIVEUPDATEEXIT
Автор(ы): Arei(функции),использование для обновления FTP идея Ganibal95 ,самоудаление программы взято с форума.
P.S.С первой "полезняшкой" меня :IL_AutoIt_1: