Построение системы обновлений
Давно я ничего не спрашивал на этом форуме)
Программа: написанное на Qt приложение, БД - SQLite
Вопрос: к тем, кто имеет опыт в проектировании и реализации систем обновлений
Какие есть варианты?
Ну и просто хотелось бы поделиться опытом со сведущими в этой области людьми
Навскидку
- Вариант, который сейчас у нас.[list]
- программа периодически запрашивает с сервера файл, содержащий информацию об актуальной версии
- если версия отличается, качается архив с актуальными файлами
- файлы из архива извлекаются в папку с приложением, с заменой уже существующих
- также скачиваются скрипты обновления бд, сгенеренные мерджерами SQlite'овских БДшек, и выполняются по отношению к текущей БД юзера
- На сервере лежит файл, содержащий названия файлов и их хэш-суммы
- На клиенте вычисляются хэш-суммы всех файлов, и сверяются со списком хэш сумм файлов сервера
- Скачиваются те файлы, хэш-суммы которых либо отличаются от текущих, либо которых нет в принципе
- БД обновляется таким же образом, как и в варианте 1
- Скачивается дистрибутив программы, и выполняется установка в папку с программой, как бы обновляя ее содержимое
- Если в данной папке хранится старая БД, то она мерджится - либо при установке, либо при первом запуске
Проблемы, которые есть в любом случае:
- Необходимо, чтобы в архиве на сервере лежали в ЛЮБОМ СЛУЧАЕ все файлы, которые потребуются
- Если какого-то файла в архиве нет, будет работать неправильно
- Проблема обновлений конфигурационных файлов чтобы сохранить пользовательские настройки...
Какие мысли по всему этому?:)
Вобщем как 1/2 вариант работает:
это: программа периодически запрашивает с сервера файл, содержащий информацию об актуальной версии
и это: На сервере лежит файл, содержащий названия файлов и их хэш-суммы
в одном файле. Проверяем "актуальность" версии и качаем новые файлы. во всех менеджерах есть вариант запустить полную проверку файлов ручками. Почему так? - потому что проверять при каждом запуске 5-10 Гиг файлов напряжно. Если прога маленькая - то это не критично. Еще один момент - вирусня. Комп вашего клиента вполне может быть заражен вирусней и как например делает qip при расхождении чексуммы - тупо не запускается предлагая себя снова и снова обновить - не вариант. А вот антивирусники (например dr.web) полностью себя проверяют при запуске. Также у веба интересный момент при обновлении: если он видит что файл обновился он сначала запрашивает с сервака патч для файла, если нет - сжатую версию файла и только потом полную версию файла - типа трафик экономит :)