crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> AutoUpdate программы., Как сделать самообновляемый бинарный файл?
grio
  опции профиля:
сообщение 28.1.2010, 18:46
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Как сделать, что бы бинарь мог обновить сам себя?
Вернее записать другой бинарь поверх себя?
И потом перезапуститься.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2010, 18:58
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


только запустив некий вспомогательный процесс, обновлялку. В виндовозе нелзя ничего сделать с бинарём если он загружен в память, т.к. виндовоз его файл использует в качестве "файла подкачки", чтобы экономить реальный файл подкачки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 28.1.2010, 19:31
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 28.1.2010, 18:58) *
только запустив некий вспомогательный процесс, обновлялку. В виндовозе нелзя ничего сделать с бинарём если он загружен в память, т.к. виндовоз его файл использует в качестве "файла подкачки", чтобы экономить реальный файл подкачки


Под вспомогательным процессом имеется ввиду запуск отдельного бинарного файла?
Или можно создать некий виртуальный процесс из того же бинаря?

Наверняка есть уже простой готовый исходник автоапдейта через интернет,
что бы не писать снова велосипед?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2010, 19:38
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(grio @ 28.1.2010, 22:31) *
Под вспомогательным процессом имеется ввиду запуск отдельного бинарного файла?
да, который запускается из твоего приложения, затем приложение завершается. Обновлялка копирует откуда-то на место твоего приложения новый файл, запускает его и после удачного запуска сама выгружается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gigabyte
  опции профиля:
сообщение 28.1.2010, 21:46
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 9.8.2009
Пользователь №: 992

Спасибо сказали: 2 раз(а)




Репутация:   1  


1.Можеш посмотреть Mozilla Firefox там есть updater как отдельный файл. и ничего в нем страшного нет
2.Можеш извратится и написать более менее стабильное ядро в которое включить функцию автообновления т.е. закачка распаковка, а все интерфейсы, логику и т.д. и т.д. прилеплять к нему через библиотеки, потом для обновления их надо выгрузить обновить и загрузить обновленные
3.Еще больший изврат, обновлять через интсталятор, т.е. тотже NSIS или InnoSetup в каком-то из своих модулей поддерживают загрузку файлов через веб, для обновления можеш просто запускать его с определенным параметром.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 28.1.2010, 22:34
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(gigabyte @ 28.1.2010, 21:46) *
1.Можеш посмотреть Mozilla Firefox там есть updater как отдельный файл. и ничего в нем страшного нет
[skipped]


К сожалению, Фокс разработан не на Qt.

У меня родилась идея как сделать самоапдейт под Винду.

1. Качаем новый бинарь (прогой), сохраняем под именем myprogram.new
2. Создаем и стартуем батник.
3. Выходим из программы.

-----update.bat-------
@echo off

rem Пятисекундная задержка (что бы прога успела завершиться)
ping www.grio.ru

rem Операции с бинарником (бекапим на всякий случай)
ren myprogram.exe myprogram.%RANDOM%.%DATE%.bak
copy myprogram.new myprogram.exe

rem Стартуем обновленную прогу (start нужен, что бы закрылось окно батника)
start myprogram.exe
------------------------

Для Пингвинов можно придумать нечто подобное.

Сообщение отредактировал grio - 28.1.2010, 22:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 28.1.2010, 22:45
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


А для чего такие сложности, для чего заставлять основную программу делать не нужные ей операции?
Пользователь запускает основную программу, при запуске она с помощью QProcess запускает маленькую программу updater, которая проверяет доступно ли обновление, если нет - завершается, иначе - скачивает/докачивает его. Основная программа в это время спокойно работает.
Как только все нужное загрузилось, updater открывает окно и предлагает пользователю обновить программу, если он соглашается, то обновлялка закрывает основную программу, производит все необходимые операции (переименовывает бинарник, правит конфигурационные файлы, реестр, ...) и запускает программу.

Насчет пингвина - там уже все придумано (rpm, deb, ...).

Сообщение отредактировал BRE - 28.1.2010, 22:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 28.1.2010, 22:56
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  



BRE, еще бы сорец прикрепить к твоему посту, и цены бы ему небыло )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 28.1.2010, 23:11
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Где то с год назад, была мысль сделать универсальный обновлятель. :)
Только, после предварительного проектирования, оказалось что сделать его универсальным - очень и очень не просто. И это только те задачи, которые пришли мне в голову в тот момент.
Слишком разные задачи могут быть. Для одного бинарника все просто, а вот если начинают изменяться форматы файлов с данными, конфигурационные файлы и т.д.
Тут даже с использованием скриптов будет не всегда просто описать, что и как нужно сделать для корректного обновления.
Короче, пока отложено на неопределенный срок. :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2010, 23:23
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(grio @ 29.1.2010, 1:56) *
BRE, еще бы сорец прикрепить к твоему посту, и цены бы ему небыло )
а ты чем будешь заниматься?
Суть процессе объяснена, не вижу никаких сложностей в реализации под винду.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.12.2024, 20:16