Что нового

LIVEUPDATE-обновление программы

Arei

Скриптер
Сообщения
938
Репутация
115
Код:
; #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:
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Взято оформление у тебя, но поменял смайлики и сожержание. :smile: Но если что могу убрать.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Можешь оставить, я не против :smile:
 

falcon92

Новичок
Сообщения
5
Репутация
0
Извиняюсь, что не тестил.

Мне кажется или оно не будет работать с уже запущенным софтом?
Никак не могу адекватный алгоритм самообновления придумать. Приходится запускать файло для убиства корневого процесса, двигать файло и запускать вновь (АВ меня не любят после такого).

Геморой, но судя по всему, тут так же, или нет? ;)
 
Верх