Russian Qt Forum

Qt => Общие вопросы => Тема начата: C.H. от Март 07, 2008, 17:28



Название: Автоматичесмкое обновление програмы
Отправлено: C.H. от Март 07, 2008, 17:28
Привет!
хочю сделать сабж.

надо что бы при запуске программа лезла по http/ftp и проверяла не появилась ли новая версия.
если есть выкачивала ее и уже потом запускала бы новую версию.

даже не знаю с какой стороны подступится.
В Линуксе все понятно, перезаписал банарник и все.
а вот под Виндой себя же перезаписать не получится :(

может уже есть готовый open-source проект, я просто плохо гуглю?

Ну естественно написать все это добро на QT


Название: Re: Автоматичесмкое обновление програмы
Отправлено: Пантер от Март 07, 2008, 19:14
Нужно сделать отдельный exe, который и будет все делать. Т.е. твоя софтина лезет в нет и проверяет версию, если есть новая, то вызывается другая твоя прога UpdateMi с параметрами и основная софтина завершается. А вот UpdateMi выкачивает софтину, в цикле удаляет старую версию (цикл нужен чтобы дождаться завершения основной проги) и устанавливает новую.


Название: Re: Автоматичесмкое обновление програмы
Отправлено: BRE от Март 07, 2008, 21:16
Нужно сделать отдельный exe, который и будет все делать. Т.е. твоя софтина лезет в нет и проверяет версию, если есть новая, то вызывается другая твоя прога UpdateMi с параметрами и основная софтина завершается. А вот UpdateMi выкачивает софтину, в цикле удаляет старую версию (цикл нужен чтобы дождаться завершения основной проги) и устанавливает новую.
Или наоборот, сначала запускается "загрузчик", который проверяет новую версию в нете. Если новой версии нет, то запускаем текущую, иначе скачивает новую и запускаем ее.


Название: Re: Автоматичесмкое обновление програмы
Отправлено: C.H. от Март 07, 2008, 23:58
вы оба правы :)
хочется найти готовое решения, а то самому так лень писать ;)


Название: Re: Автоматичесмкое обновление програмы
Отправлено: pastor от Март 08, 2008, 00:00
Последний вариант имхо не подходит. Представим ситуацию, что плохой коннект или нет вобще коннекта. При этом юзер будет наблюдать каждый раз тормоз при запуске программы. А многие юзеры - это народ нервный ;) Лучше чтобы главная программа следила за обновлениями


Название: Re: Автоматичесмкое обновление програмы
Отправлено: DpoHro от Март 08, 2008, 01:51
Основная программа запускает updater.exe или сама выступает в роли апдейтера производя это в отдельном потоке, но лучше внешняя программа.
updater.exe лезет на фтп и качает новый дистрибутив mydistr.exe, который сам уже все сделает после запуска и завершит работу программы и установит обновление.
У меня дистрибутив проверяет установлено ли приложение на ПК, если нет, то ставит целиком, если да, то обновляет.

Это и просто и надежно. 1 файл, скачался - ставим, не скачался, скачаем в следующий раз...


Название: Re: Автоматичесмкое обновление програмы
Отправлено: Вячеслав от Март 08, 2008, 20:39
Основная программа запускает updater.exe или сама выступает в роли апдейтера производя это в отдельном потоке, но лучше внешняя программа.
updater.exe лезет на фтп и качает новый дистрибутив mydistr.exe, который сам уже все сделает после запуска и завершит работу программы и установит обновление.
У меня дистрибутив проверяет установлено ли приложение на ПК, если нет, то ставит целиком, если да, то обновляет.

Это и просто и надежно. 1 файл, скачался - ставим, не скачался, скачаем в следующий раз...
+1 .


Название: Re: Автоматичесмкое обновление програмы
Отправлено: ритт от Март 09, 2008, 02:39
а меня такой вариант не устроил. что это за "обновление" такое, когда выкачивается весь дистрибутив? такую роскошь могут позволить себе программки с размером дистриба до 3-5 метров...а если 30-50?


Название: Re: Автоматичесмкое обновление програмы
Отправлено: Вячеслав от Март 09, 2008, 13:33
И тож согласен ;) Для маленьких проектов - атомарный апдейт ..Для монстров с кучей плагинов и перекрестными связями между ними -  пришлось в лоб (по аналогии с дебиановскими пакетами) рисовать нечто вроде метаинформации ( кто зависит от кого(и какой версии) ) :(  Далее в отдельном потоке вытаскиваем , вежливо просим юзверя "а можно перегрузиться" и далее старые плагины - в bakup , новые в рабочий каталог и вперед ;)


Название: Re: Автоматичесмкое обновление програмы
Отправлено: BRE от Март 10, 2008, 10:46
Последний вариант имхо не подходит. Представим ситуацию, что плохой коннект или нет вобще коннекта. При этом юзер будет наблюдать каждый раз тормоз при запуске программы. А многие юзеры - это народ нервный ;) Лучше чтобы главная программа следила за обновлениями
Если все делать "в лоб", конечно не подходить.  ;) Вопрос был как в винде перезаписать скачанный .exe. Простой вариант из другого процесса, который все скачает и когда все будет готово, подменит его и запустит. А к проблем коннекта можно добавить еще кучу, типа начали качать, а секретарша решила уйти на обед и выключила машину (делать поддержку докачки?) или программа работает месяцами без перезапуска (обновления есть, а их не кто не проверяет).
Продумывать реализацию нужно под конкретные цели и нужды.


Название: Re: Автоматичесмкое обновление програмы
Отправлено: -QT- от Март 13, 2008, 11:23
Для себя я принял концепцию:
Основной запускающий модуль и куча плугинов. Вся реализация в плагинах.
 :D
Загружающий модуль отслеживает в инете новый плагин, спрашивает пользователя "найдено обновление для ..." потом качает его если пользователь согласен установить обновление и просит перегрузить приложение.
Старые версии плагинов сохраняются - поэтому можно откатиться на предидущую версию плагина.
 ???
Правда еще не закончил с проверкой обновлений через POP3, а так все работает.
Вот еще один подход к обновлению.


Название: Re: Автоматичесмкое обновление програмы
Отправлено: DpoHro от Апрель 11, 2008, 22:26
Да мое решение для небольших приложений...