Велосипедим обновлятор
Метки updater, автообновление, обновление
Как организовать автообновление десктопной программы. Безотносительно языка программирования. Заранее, прежде чем приступать к кодингу, должно быть решено несколько вопросов:
В каком виде поставлять обновление?
Как проверять, что существует новая версия? В первую очередь, программа должна иметь при себе собственный идентификатор версии ПО. Хеш или контрольная сумма файлов программы не годятся, т.к. позволяют только определить только сам факт отличия, а не сравнить, где (здесь или там) версия новее. Это может быть либо номер версии (172 или 1.0.0.8), либо дата (2020-04-28T23:45:00), либо что-то ещё, позволяющее программе сравнить две версии и однозначно определить, какая из них новее. Если у вас такого нет вообще, стоит рассмотреть применение, например, Семантического Версионирования. Далее, программа должна уметь запрашивать данные о доступных обновлениях у поставщика обновлений, а поставщик должен уметь эти данные предоставлять. В случае применения простого сетевого диска в локальной сети, можно расположить текстовый (json, xml) файлы с необходимыми данными. В случае своего сервера также можно просто выложить файл (FTP), либо реализовать Web API (на shared хостинге, VPS). Файл данных должен содержать необходимую для обновления информацию, в частности идентификатор версии ПО и url файла обновления. Реомендуется предусмотреть хеш файла, с целью проверки его корректности после загрузки. Также можно добавить дата выпуска, список отличий от предыдущей версии, хеш ревизии и дату коммита Git, и пр. С сервера, для выложенной на нём актуальной версии программы, требуется получить идентификатор версии ПО. Пример, как может выглядеть файл в простом случае:
Когда проверять, что существует новая версия? Встречаются такие варианты:
Когда начинать загрузку?
Как загружать?
Разве что своего сайта нет и файлы лежат на каком-нибудь облачном хранилище, откуда скачать что-либо можно, только если зайти самостоятельно и кликнуть куда-нибудь. В этом случае следует просто выдать пользователю ссылку на сайт, либо открыть его в браузере. Когда устанавливать? Обычно после загрузки сообщается о готовости к установке и предлагается установить обновления. Встречающиеся варианты:
Как устанавливать? Если используется инсталлятор, достаточно запустить его и сразу закрыть программу. Исполняемые файлы программы под Windows обычно не могут быть удалены, если они запущены. Там всё не просто, но обходные пути не нужны, т.к. уже давно придумано простое решение. → Поэтому инсталлятор должен дождаться завершения программы, и лишь потом начать установку. Сделать это можно, например, применением Mutex'а. В частности, такая опция есть у Inno Setup. Инсталлятор пытается создать локальный и/или глобальный Mutex, который также создаёт и программа. А Mutex, как известно, может быть создан только один, в пределах сессии или глобально (см. CreateMutexA function (synchapi.h)). Тот же инсталлятор в ходе установки определит каталог текущей версии, удалит её, и установит новую. И запустит приложение. Если используется просто архив, то, загрузив его во временный каталог, следует разместить там исполняемый файл, либо какой-нибудь консольный скрипт. Далее он получит от вашей программы путь установки, дождётся закрытия программы, удалит её, распакует в указанное место новые файлы, запустит установленную программу, удалит временные файлы. И затем удалит себя, а если не сможет, попросит об этом установленную программу. Если автор - ССЗБ и вместо инсталлятора (или иной, более полезной функциональности программы) гордо возится с единым exe, то единственно что в предыдущей (архив) последовательности упрощается - распаковка одного файла вместо нескольких. Всё. ![]() Также, есть вариант установить новую версию рядом с существующей, без её удаления. Программа при запуске проверит наличие рядом более новой версии и при обнаружении запустит её, после чего сама закроется. При обнаружении же рядом прежней версии её можно будет удалить. Что делать с данными?
Простейший обновлятор приложения на PowerShell с использованием файловой системы. |
Всего комментариев 1
Комментарии
-
опциональная возможность отката на предыдущую версию., включая умный откат данных.
а так же что то типа цифровой подписи источника обновления.....Запись от voral размещена 27.04.2020 в 11:55