Russian Qt Forum
Ноябрь 26, 2024, 02:24
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Самообновление приложения
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Самообновление приложения (Прочитано 7393 раз)
QuAzI
Гость
Самообновление приложения
«
:
Март 23, 2012, 15:38 »
Если в юнихах обновление софта - проблемы как правило пакетного менеджера и сопутствующего софта, то на винде как-то беда.
Кто-нибудь делал самообновление софта? Как? Желательно без обвязки кучей bat-ников или аналогичных костылей.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Самообновление приложения
«
Ответ #1 :
Март 23, 2012, 15:43 »
лучше этого не делать, и переложить на плечи пользователя. Программа может скачивать со своего сайта файлик, в котором указана последняя выпущенная версия, и сравнивать со своей, и выдавать сообщение, что доступно обновление. А ещё лучше сделать это в виде элемента меню, и чтобы пользователь сам проверял обновления.
Записан
QuAzI
Гость
Re: Самообновление приложения
«
Ответ #2 :
Март 23, 2012, 15:50 »
Ну допустим юзверь получил свой заветный алерт "вам пришло обновление", а толку? Делать полный реинсталл ПО ? Не красиво, да ещё надо или в реестре хранить путь, куда софтина ставилась в прошлый раз (и чтобы инсталятор умел этот путь прочесть и туда снова поставить). И в итоге упираемся в то, что всё равно приложение нужно закрыть (иначе без низкоуровневых хаков не обновится, винда же), кувыркаться самому с файлами, затем снова запустить приложение и думать "а не переписал ли инсталл конфиг например дефолтным конфигом".
А так при обновлении по сети репорты и бинарник можно хоть из базы тянуть и вопрос только как красиво подменить основные исполняемые файлы.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Самообновление приложения
«
Ответ #3 :
Март 23, 2012, 15:55 »
Цитата: QuAzI от Март 23, 2012, 15:50
Ну допустим юзверь получил свой заветный алерт "вам пришло обновление", а толку?
Обновления не нужно скачивать, пользователю только показывать сообщение, что доступно обновление на сайте программы, которое нужно вручную скачать и поставить. Я так сам делал в одном из проектов, да и другие проекты типа virtualbox делают аналогично.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Самообновление приложения
«
Ответ #4 :
Март 23, 2012, 15:56 »
Через инсталлятор все нормально делается. Куда он ставился, он помнит. Запускаешь его в сайлент режиме и завершаешься. Используй Inno Setup.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
V1KT0P
Гость
Re: Самообновление приложения
«
Ответ #5 :
Март 23, 2012, 15:56 »
Цитата: QuAzI от Март 23, 2012, 15:50
А так при обновлении по сети репорты и бинарник можно хоть из базы тянуть и вопрос только как красиво подменить основные исполняемые файлы.
Ну самый банальный это отдельный бинарник который запускается, он все скачивает, проверяет контрольные суммы. Заменяет необходимые файлы и запускает основной бинарник. Если необходимо заменить этот бинарник-обновлялщик то основная программа его скачивает проверяет контрольные суммы и заменяет. Вроде не слишком сложно.
Записан
QuAzI
Гость
Re: Самообновление приложения
«
Ответ #6 :
Март 23, 2012, 16:06 »
Цитата: Пантер от Март 23, 2012, 15:56
Через инсталлятор все нормально делается. Куда он ставился, он помнит. Запускаешь его в сайлент режиме и завершаешься. Используй Inno Setup.
Как раз им и пользуюсь, но что-то про такие фичи не видел. Это где-то включается или его дефолтное поведение?
Это конечно вариант... но как-то не хотелось тянуть весь инсталл, для проекта на Qt будет весить не столько само приложение и репорты, сколько статичная часть (необходимые dll-файлы, которые если и меняются, то только с версией Qt). Ну или делать две инсталяшки: обновление и полный инсталл, что добавит вопросов "что ставить, что не ставить".
«
Последнее редактирование: Март 23, 2012, 16:09 от QuAzI
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Самообновление приложения
«
Ответ #7 :
Март 23, 2012, 16:08 »
Какие фичи? Ищи в манах про ключ silent.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
QuAzI
Гость
Re: Самообновление приложения
«
Ответ #8 :
Март 23, 2012, 16:14 »
Блин. Я подумал, что Inno умеет ждать закрытия основного приложения. А тут получается может быть ситуация, когда Inno Setup уже успел обломиться с перезаписью, а основное приложение ещё будет в памяти (какая-нить нештатная фигня, в духе долгого закрытия подключения с базой на кривых каналах связи и т.п.)
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Самообновление приложения
«
Ответ #9 :
Март 23, 2012, 16:18 »
Цитата: V1KT0P от Март 23, 2012, 15:56
Ну самый банальный это отдельный бинарник который запускается, он все скачивает, проверяет контрольные суммы. Заменяет необходимые файлы и запускает основной бинарник.
Во всех этих автообновляторах самое больное место - откат после ошибки. Например, ты обновил плагины для программы, а свою программу по какой-либо причине - нет. И новые плагины со старым бинарником несовместимы. Поэтому я бы никогда не писал автообновлятор. К тому же, если всё-таки для автообновления качать сам инсталлятор, то с включённым UAC он не сможет установится в автоматическом режиме, если программа стоит в системном каталоге, и будет (?) просить дать ему права, а пользователь будет думать что это вообще такое и откуда вылезло.
Записан
QuAzI
Гость
Re: Самообновление приложения
«
Ответ #10 :
Март 23, 2012, 16:26 »
Откат конечно беда, но это не повод не обновлять, это повод подумать как проконтролировать обновление и сделать перед ним бекап. Потому как когда старая софтина начинает работать с новой БД - будет ещё хуже, чем если юзверь не сможет стартануть софтину.
Записан
Странник
Гость
Re: Самообновление приложения
«
Ответ #11 :
Март 24, 2012, 00:21 »
все зависит от вкусов и задачи. в случае корпоративного приложения автообновление зачастую просто необходимо, и по возможности - тихое. как у нас реализовано автообновление я уже где-то описывал. программа при запуске проверяет и выкачивает обновления, сверяет контрольные суммы загруженных файлов для исключения повреждений. затем оригинальные файлы переименовываются - Windows не позволяет удалить файлы запущенных программ, но переименовывать их можно свободно - и вместо них подсовываются обновленные файлы. программа перезапускается, старые файлы удаляются. можно сделать более гибкий вариант, с launcher'ом. тогда можно будет даже откатить обновление, если обновленная версия не запускается.
Записан
V1KT0P
Гость
Re: Самообновление приложения
«
Ответ #12 :
Март 24, 2012, 00:38 »
Цитата: Alex Custov от Март 23, 2012, 16:18
Во всех этих автообновляторах самое больное место - откат после ошибки. Например, ты обновил плагины для программы, а свою программу по какой-либо причине - нет. И новые плагины со старым бинарником несовместимы. Поэтому я бы никогда не писал автообновлятор. К тому же, если всё-таки для автообновления качать сам инсталлятор, то с включённым UAC он не сможет установится в автоматическом режиме, если программа стоит в системном каталоге, и будет (?) просить дать ему права, а пользователь будет думать что это вообще такое и откуда вылезло.
Ну так а что обновлятору мешает откатить изменения в случае неудачи? При чем если сделать запуск основной программы через обновлятор, то если при обновлении вырубили комп, то при запуске он сперва либо завершит обновление либо откатит и запустит основную программу.
Записан
QuAzI
Гость
Re: Самообновление приложения
«
Ответ #13 :
Март 24, 2012, 13:58 »
Цитата: Странник от Март 24, 2012, 00:21
Windows не позволяет удалить файлы запущенных программ, но переименовывать их можно свободно
Какой-то хак? Ведь ни один файловый менеджер не даёт переименовывать запущенные или открытые файлы, да и директории в которых они лежат тоже. И стандартные вызовы перемещения файлов тоже обламываются обычно
Записан
Bepec
Гость
Re: Самообновление приложения
«
Ответ #14 :
Март 24, 2012, 18:40 »
Переименовывать - можно. Перемещать - нельзя.
Это не ИМХО, это факт, проверь сам
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...