nu3dell
Осваивающий
- Сообщения
- 139
- Репутация
- 24
Есть библиотека "Update" из этой темы http://autoit-script.ru/index.php?topic=1814.0
Но дело в том что при обновлении выдает ошибку ( что то там с 64 битной ОС)
Мне нужно переделать тот код что бы при нажатии "Да" переходило на ссылку для скачивание файла и потом уже запускать скачанную версию .
Вот код библиотеки "Update"
Также наверно придется изменить это
Но дело в том что при обновлении выдает ошибку ( что то там с 64 битной ОС)
Мне нужно переделать тот код что бы при нажатии "Да" переходило на ссылку для скачивание файла и потом уже запускать скачанную версию .
Вот код библиотеки "Update"
Код:
#Include <Misc.au3>
#include <WindowsConstants.au3>
Global $g_hInet_Update, $g_CurrentVersion_Update, $g_SilentMode_Update
Global $g_TempFileInfo_Update = @TempDir & "\MyApp_Update.inf"
Func _StartCheckForUpdate($url,$cur_version,$silent_mode = True)
$g_CurrentVersion_Update = $cur_version
$g_SilentMode_Update = $silent_mode
; ------ Пингуем хост в нормальном режиме, прежде чем скачивать MyApp_Update.inf ----------
If $g_SilentMode_Update <> True Then
Local $host = StringRegExpReplace($url,".+?//(.+?)/.+","$1")
If not Ping($host,1000) Then
MsgBox(16,"Ошибка","Не могу подключиться к серверу!")
Return
EndIf
EndIf
;-------------------------------------------------------------------------------------------
$g_hInet_Update = InetGet($url,$g_TempFileInfo_Update,1,1)
AdlibRegister("_CheckUpdate",20)
EndFunc
Func _CheckUpdate()
If InetGetInfo($g_hInet_Update,2) Then
AdlibUnRegister("_CheckUpdate")
Local $DowloadSuccesfull = InetGetInfo($g_hInet_Update,3)
InetClose($g_hInet_Update)
If $DowloadSuccesfull Then
Local $error_in_section = False
; ---------------------- Проверяем ключ "Update Version" --------------------
Local $Last_Version = IniRead($g_TempFileInfo_Update,"Info","Update Version","")
If $Last_Version = "" Then $error_in_section = True
; ---------------------------------------------------------------------------
; ---------------------- Проверяем ключ "Update File" -----------------------
Local $Update_File = IniRead($g_TempFileInfo_Update,"Info","Update File","")
If $Update_File = "" Then $error_in_section = True
; ---------------------------------------------------------------------------
; ---------------------- Выводим сообщение об ошибке, если в какой-то ключе произошла ошибка ---------------------------
If $error_in_section Then
If not $g_SilentMode_Update Then MsgBox(16,"Ошибка","Ошибка в файле, содержащем информацию о новой версии программы!")
Return
EndIf
; ----------------------------------------------------------------------------------------------------------------------
; ------------------ Проверяем ключ "Update Changes" -----------------------
; --------------------- Этот ключ необязателен -----------------------------
$Update_Changes = IniRead($g_TempFileInfo_Update,"Info","Update Changes","")
; --------------------------------------------------------------------------
FileDelete($g_TempFileInfo_Update)
Local $CRLF = @CRLF
Local $VersionCompare = _VersionCompare($g_CurrentVersion_Update,$Last_Version)
If $VersionCompare = -1 Then
; ------------ Формируем сообщение, которое будет выведено при обнаружении новой версии ---------------------
Local $message_string = "Доступна новая версия программы: " & $Last_Version
If $Update_Changes <> "" Then $message_string &= $CRLF & $CRLF & "Изменения в новой версии: " & $Update_Changes & $CRLF
$message_string &= $CRLF & "Скачать новую версию программы?"
; -----------------------------------------------------------------------------------------------------------
Local $msg_ret = MsgBox(68,"Информация",$message_string)
If $msg_ret = 6 Then
_DownloadNewVerion($Update_File)
Else
return
EndIf
Elseif $VersionCompare = 0 Then
If not $g_SilentMode_Update Then MsgBox(64,"Информация","У вас самая последняя версия!")
EndIf
Else
If not $g_SilentMode_Update Then MsgBox(16,"Ошибка","Файл с информацией о новой версии программы не доступен на сервере!")
EndIf
EndIf
EndFunc
; Данная Функция скачивает новую версию программы, при этом отображая прогресс скачивания.
; По завершении скачивания программа завершается и запускается новая версия программы.
Func _DownloadNewVerion($Update_File)
Local $Form_DownloadNewVersion, $Progress_Downloaded
#Region ### START Koda GUI section ### Form=H:\AutoIT 3.3.0.0\Инструметы для AutoIt\koda_1.7.2.8_b247_2010-04-15\Forms\Form_download.kxf
$Form_DownloadNewVersion = GUICreate("Скачивание новой версии...", 191, 26, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
$Progress_Downloaded = GUICtrlCreateProgress(0, 0, 190, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; ------- Пингуем сервер. В случае неудачи, отображаем сообщение ---------
; ------- P.S. На пинг уходит меньше времени в случае, если инет выключен, ----
; ------- чем просто при использовании InetGet ---------------------------
Local $host = StringRegExpReplace($Update_File,".+?//(.+?)/.+","$1")
If not Ping($host,1000) Then
GUIDelete($Form_DownloadNewVersion)
MsgBox(16,"Ошибка","Не могу подключиться к серверу для скачивания новой версии программы!")
Return
EndIf
; -------------------------------------------------------------------------
; ---- Выводим сообщение, если файл, указанный в MyApp_Update.inf, не доступен -----
Local $FileSize = InetGetSize($Update_File,1)
If @error Then
GUIDelete($Form_DownloadNewVersion)
MsgBox(16,"Ошибка","На сервере не найден файл с новой версией программы!")
Return
EndIf
; -----------------------------------------------------------------------------------
; --------------------------------------- Скачиваем новую версию программы и затем её запускаем --------------------------------
Local $FileName = StringRegExpReplace($Update_File,".+/(.+)","$1")
Local $FileInTempDir = @TempDir & "\" & $FileName
Local $FileInScriptDir = @ScriptDir & "\" & $FileName
Local $hInet = InetGet($Update_File,$FileInTempDir,1,1)
Do
Sleep(20)
GUICtrlSetData($Progress_Downloaded,InetGetInfo($hInet,0)/$FileSize*100)
Until InetGetInfo($hInet,2)
GUIDelete($Form_DownloadNewVersion)
Local $DowloadSuccesfull = InetGetInfo($hInet,3)
InetClose($hInet)
If $DowloadSuccesfull Then
; Сюда можно вставить функцию для сохранения настроек перед выходом
Run(@ComSpec & ' /c ping -n 2 localhost>nul & Move /y "' & $FileInTempDir & '" "' & $FileInScriptDir & '" & Start "" "' & $FileInScriptDir & '"', '', @SW_HIDE)
Else
MsgBox(16,"Ошибка","Не удалось скачать новую версию программы!" & @CRLF & "Возможно оборвалось интернет-соединение!")
EndIf
;-------------------------------------------------------------------------------------------------------------------------------
Exit
EndFunc
Также наверно придется изменить это
Код:
#Include "Update.au3" ; обязательно нужно включить
$Current_Version = "1.0"
; -- Будет вызвана функция в скрытом режиме в фоне для проверки последней версии программы ---
_StartCheckForUpdate("http://mysite.com/MyApp_Update.inf",$Current_Version,True)
; При этом не забудьте залить на сайт файл MyApp_Update.inf, а также новую версию программы