AutoUpdate программы., Как сделать самообновляемый бинарный файл? |
Здравствуйте, гость ( Вход | Регистрация )
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, 19:38
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Под вспомогательным процессом имеется ввиду запуск отдельного бинарного файла? да, который запускается из твоего приложения, затем приложение завершается. Обновлялка копирует откуда-то на место твоего приложения новый файл, запускает его и после удачного запуска сама выгружается.
|
|
|
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 |
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 |
Где то с год назад, была мысль сделать универсальный обновлятель.
Только, после предварительного проектирования, оказалось что сделать его универсальным - очень и очень не просто. И это только те задачи, которые пришли мне в голову в тот момент. Слишком разные задачи могут быть. Для одного бинарника все просто, а вот если начинают изменяться форматы файлов с данными, конфигурационные файлы и т.д. Тут даже с использованием скриптов будет не всегда просто описать, что и как нужно сделать для корректного обновления. Короче, пока отложено на неопределенный срок. |
|
|
Litkevich Yuriy |
28.1.2010, 23:23
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 22.12.2024, 13:17 |