Автор Тема: [Интернет] Автообновление программы в нормальном и скрытом (в фоне) режимах  (Прочитано 26824 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
AutoIt: 3.3.6.0
Версия: 1.0

Категория: Автоматизация, Вспомогательные функции, Интернет

Описание:
Функция для проверки новой версии программы в интернете.
Старался её сделать так, чтобы в любых ситуациях (при включенном и выключенном интернете) были минимальные задержки при проверке последей версии программы.

Как работает функция:
Сначала функция скачивает файл информационный файл (к примеру, MyApp_Update.inf) с вашего сайта, в котором хранится информация о последней версии, а также ссылка для скачивания. Происходит сравнение текущей версии и последней. В случае обнаружения новой версии, выводится MessageBox: "Скачать новую версию? Да/Нет". Во время скачивания новой версии будет отображаться прогресс скачки, и после окончания скачивания будет запущена новая версия.

Функция может работать в 2-х режимах:
   1) В нормальном, т.е. при вызове функции будет в любом случае отображено сообщение либо о наличии последней версии либо о проблеме проверки последней версии.
В этом режиме функцию вызывать посредством ручного вызова в программе (например, при нажатии в меню или на кнопку).
   2) В тихом(скрытом), т.е. при вызове функции не будут появляться никакие сообщения в случае, если не удалось обнаружить новую версию. В этом режиме функцию нужно вызывать при запуске программы. При этом функция будет работать в фоне и не будет влиять на работу программы.


Использование функции:
Для того, чтобы проверить последнюю версию программы на своём сайте, нужно в коде скрипта вызывать функцию _StartCheckForUpdate($url_check, $Current_Version, $Silent_Mode = true)

Вот описание параметров:
1-й параметр ($url_check) - это ссылка на файл с информацией о последней версии, при этом этот файл должен иметь следующий вид (например):
[Info]
Update Version = 1.1
Update File = http://mysite.com/program-v1.1.exe
Update Changes = Исправлены баги
Замечание: Ключ "Update Changes" можно не указывать или оставить пустым

2-й параметр ($Current_Version): Тут нужно указать текущую версию программы в виде строки

3-й параметр ($Silent_Mode = True): Тут указывается, какой режим использовать: скрытый или нормальный. По умолчанию, скрытый

Код/Пример:
Код: AutoIt [Выделить]
#Include "Update.au3" ; обязательно нужно включить
$Current_Version = "1.0"
; -- Будет вызвана функция в скрытом режиме в фоне для проверки последней версии программы ---
_StartCheckForUpdate("http://mysite.com/MyApp_Update.inf",$Current_Version,True)
; При этом не забудьте залить на сайт файл MyApp_Update.inf, а также новую версию программы


Файл: Update.au3

Автор: hunter
Credits: Пример автообновления версии своего приложения by ViSiToR a.k.a CreatoR
« Последнее редактирование: Январь 20, 2011, 00:33:13 от CreatoR »

Русское сообщество AutoIt


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7808
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
kzru_hunter
Неплохо сделано.

[?]
Цитировать
Пример автообновления версии своего приложения by ViSiToR
a.k.a CreatoR :whistle: ещё было бы полезно добавить ссылку на оригинальный пример.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144

  • Автор темы
  • Репутация: 49
    • Награды
CreatoR Подправил  :)

Обновлён Update.au3: подправил некоторые недочёты
« Последнее редактирование: Май 06, 2010, 17:30:28 от kzru_hunter »

Оффлайн dimart [?]

  • Новичок
  • *
  • Сообщений: 21
  • Репутация: 0
    • Награды
а можно сделать совсем без сообщений и запросов? то есть, если есть обновление, то скрипт закачивает новую версию и запускает её?  :think:
« Последнее редактирование: Март 23, 2011, 18:07:52 от dimart »

Русское сообщество AutoIt


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7808
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
dimart  [?]
Цитировать
а можно сделать совсем без сообщений и запросов?
Можно.

Оффлайн dimart [?]

  • Новичок
  • *
  • Сообщений: 21
  • Репутация: 0
    • Награды
А как? можно подробнее? Просто уже часа 3 никак не могу сделать, блин :(

OffTopic
Цитировать
Можно.

Так и знал, что это ответят :)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7808
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
dimart  [?]
Цитировать
А как?
Нужно в коде покапаться (удалить MsgBox'ы, и упоминания о GUI*, хотя конекчно стоило бы сделать опцию для тихого обновления).

Оффлайн dimart [?]

  • Новичок
  • *
  • Сообщений: 21
  • Репутация: 0
    • Награды
Я этим и занимался, но там всё так взаимосвязано, мне похоже на такое опыта общения с GUI не хватает.

Вот подредактировал, хотя бы ошибок больше не вылазит. Но он походу теперь не работает  ;D

проверьте пожалуйста, где ошибка? :)

(нажмите для показа/скрытия)

(нажмите для показа/скрытия)
« Последнее редактирование: Март 24, 2011, 06:55:38 от dimart »

Русское сообщество AutoIt


Оффлайн dimart [?]

  • Новичок
  • *
  • Сообщений: 21
  • Репутация: 0
    • Награды
Неужели никто не может помочь? :(

Оффлайн Arei [?]

  • Скриптер
  • ****
  • Сообщений: 938
  • Репутация: 115
  • Пол: Мужской
    • Награды
скрой окно обновления и всё.Что сложного?

Оффлайн Prorok [?]

  • Новичок
  • *
  • Сообщений: 3
  • Репутация: 0
    • Награды
У меня проблема,кто может подскажите.(я просто новичек в этом деле)

I.я залил на сайт,а если быть точным на укоз 2 файла

1- MyApp_Update.inf с внутренним кодом

[Info]
 Update Version=1.1
 Update File=http://sait.ucoz.ru/razdel/прога.exe

2- файл прога.exe
II. Мой файл прога.exe ,который расположен на рб имеет внутрений код вида
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Inet.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 193, 125)
$Pic1 = GUICtrlCreatePic("D:\foto\990415523.jpg", 0, 0, 609, 433)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <Inet.au3>
;
 
Global $sAppUpdate_Page = "http://sait.ucoz.ru/razdel/MyApp_Update.inf"
Global $sApp_Version = "1.0"
 
Global $hGUI = 0
 
;Here we checking in quiet mode (only if new version available there will be a message).
 _AppCheckUpdates_Proc($sAppUpdate_Page, $sApp_Version, 1)
 
#Region GUI Part
$hGUI = GUICreate("My Application", 300, 200)
 
$CheckUpdates_Button = GUICtrlCreateButton("Check Updates", 200, 170, 90, 20)
$Exit_Button = GUICtrlCreateButton("Exit", 20, 170, 60, 20)
 
GUISetState(@SW_SHOW, $hGUI)
#EndRegion GUI Part
;
 
While 1
     Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE, $Exit_Button
             Exit
         Case $CheckUpdates_Button
             _AppCheckUpdates_Proc($sAppUpdate_Page, $sApp_Version)
     EndSwitch
 WEnd
 
 Func _AppCheckUpdates_Proc($sServer_Page, $sCurrent_AppVersion, $iMode=-1) ;$iMode <> -1 to check quitly
     Local $sUpdate_Info = _INetGetSource($sServer_Page)
 
     If Not StringInStr($sUpdate_Info, "[Info]") Then
         If $iMode = -1 Then MsgBox(48, "Update check", _
             StringFormat("There was an error (%i) to check update, please contact with the author.", 1), 0, $hGUI)
 
         Return SetError(1, 0, 0)
     EndIf
 
     Local $sUpdate_Version = StringRegExpReplace($sUpdate_Info, "(?s)(?i).*Update Version=(.*?)(\r|\n).*", "\1")
     Local $sUpdate_File = StringRegExpReplace($sUpdate_Info, "(?s)(?i).*Update File=(.*?)(\r|\n).*", "\1")
 
     If _VersionCompare($sUpdate_Version, $sCurrent_AppVersion) = 1 Then
         Local $iUpdate_Ask = MsgBox(36, "Update check", _
             StringFormat("There is new version available (%s).\n\nWould you like to download the update?", $sUpdate_Version), _
             0, $hGUI)
 
         If $iUpdate_Ask <> 6 Then Return 0
 
         Local $sScript_Name = StringTrimRight(@ScriptName, 4) & ".efe"
 
         Local $iInetGet = InetGet($sUpdate_File, @TempDir & "\" & $sScript_Name)
 
         If @error Or Not $iInetGet Then
             If $iMode = -1 Then MsgBox(48, "Update check", _
                 StringFormat("There was an error (%i) to download the update, please contact with the author.", 2), 0, $hGUI)
 
             Return SetError(2, 0, 0)
         EndIf
 
         Run(@ComSpec & ' /c Ping -n 2 localhost > nul & Move /y "' & _
             @TempDir & '\' & $sScript_Name & '" "' & @ScriptFullPath & '" & Start "" "' & @ScriptFullPath & '"', '', @SW_HIDE)
 
         Exit
     EndIf
 
     If $iMode = -1 Then MsgBox(48, "Update check", "You are using the newest version of this software.", 0, $hGUI)
     Return 1
EndFunc


While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd


В итоге : при запуске файла прога.exe с рабочего стола ,она предлагает обновиться на версию 1,1 и уже через секунду вылазиет ошибка что файл не той разрядности,хотя оба exe скомпилированы для х64 систем.Вообщем дело не в разрядности,а в чем то я допустил ошибку.Прошу подскажите новичку.
P.S. Извените за огромное сообщение

Оффлайн iDisketka [?]

  • Новичок
  • *
  • Сообщений: 20
  • Репутация: 0
    • Награды
Привет всем.    Автор  а если можно пожалуста то опиши как создать этот инфформационный файл....в каком расширении итд. итп.   у меня при использовании твоей библиотеки и вышеприведённых примеров выскакивает ошибка (ошибка в файле содержащем информацию о новой версии программы)  хотя всё сделанно точно по гайду.
« Последнее редактирование: Июнь 03, 2011, 12:36:30 от iDisketka »

Оффлайн rusreg79 [?]

  • Продвинутый
  • ***
  • Сообщений: 159
  • Репутация: 57
  • Пол: Мужской
    • Награды
Создаешь новый текстовый документ и сохраняешь его, дописав в названии файла: .inf
Я например использую расширение txt а не inf, так удобнее редактировать файл прямо с сайта.

Программаторы программировали, программировали, да не выпрограммировали

Оффлайн iDisketka [?]

  • Новичок
  • *
  • Сообщений: 20
  • Репутация: 0
    • Награды
Вообщем я разобрался как всё работает ...библиотека работает на отлично.....но есть небольшая проблемка....тоесть даже очень огромная.      Дело в том что при запуски библиотеки...происходит проверка файла помещённого на любой сайт скачивание с которого не требует подтверждения  далее данные в файле сопоставляются с версией программы...
   И далее если версия программы ниже чем версия записанная в информационный файл то происходит скачивание новой версии которая по идее залита на тотже сайт....Так вот проблемма состоит в том
 если обновление программы в формате .exe залито на сервер скачивание с которого  требует подтверждения   либо скачивание .ехе файла требует подтверждения на закачку   пример Ucoz.ru
 ТО вместо скачивания новой обновлённой версии...происходит регистрация кода выскакивающей страници с формой подтверждения на закачку. тоесть сам .ехе файл не скачивается....
  Пример с Ucoz.ru  не единственный.
 Ну и естественно вопрос что можно с этим поделать...как можно изменить библиотеку? либо задать параметры чтоб вместо ехе файла можно было закачать на сайт файл в формате Rar  но чтоб библиотека была способна распаковать ево.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7808
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
iDisketka  [?]
Цитировать
вопрос что можно с этим поделать
Заливать не «file.exe» а «file.efe», и при скачиваний просто переименовывать файл.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
4691 Просмотров
Последний ответ Октябрь 27, 2009, 18:04:32
от deepwood
0 Ответов
2615 Просмотров
Последний ответ Февраль 02, 2011, 14:12:38
от muskat_59
8 Ответов
13992 Просмотров
Последний ответ Март 28, 2012, 13:59:22
от C2H5OH
4 Ответов
2833 Просмотров
Последний ответ Май 29, 2012, 22:37:28
от lirikmel
4 Ответов
2475 Просмотров
Последний ответ Июнь 15, 2012, 11:56:19
от zybaskin
3 Ответов
1453 Просмотров
Последний ответ Июль 19, 2014, 22:25:53
от CreatoR
7 Ответов
2373 Просмотров
Последний ответ Октябрь 15, 2015, 16:32:59
от Yashied
0 Ответов
677 Просмотров
Последний ответ Январь 24, 2017, 11:38:19
от nitsik
4 Ответов
449 Просмотров
Последний ответ Июнь 04, 2017, 18:47:30
от musicstashall
3 Ответов
488 Просмотров
Последний ответ Август 03, 2017, 17:30:23
от Marjel