Лучшая практика для автообновлений - PullRequest
10 голосов
/ 17 января 2009

Каковы оптимальные методы для автоматического обновления приложений для настольных приложений? В настоящее время мы загружаем все файлы, затем копируем и регистрируем (если они есть) в соответствующие каталоги.

Я посмотрел на метод обновления Google Chrome. Кажется, что он сначала загружает заархивированный файл в каталог, а затем распаковывает все файлы. Кроме того, у них есть приложение настройки, которое, кажется, используется для обновления. Кроме того, они создают каталог, отображаемый для обновления версии, например 1.0.154.43, но сохраняют каталог старой версии.

Ответы [ 3 ]

15 голосов
/ 17 января 2009

Пара советов:

  • Независимо от того, как вы решите это сделать, пожалуйста, не создавайте новый сервис или процесс для проверки обновлений, а затем оставляйте его включенным постоянно . Вы знаете, как любят делать Adobe и Sun (для Java). Независимо от того, что вы делаете, я могу гарантировать, что это не настолько важно, чтобы его нужно было обновлять каждый раз, когда пользователь запускает компьютер. Обновления должны быть либо интегрированы в стандартизированный процесс обновления, общий для ОС, либо во время работы приложения. Обновления не должны постоянно красть системные ресурсы или замедлять процесс загрузки по умолчанию.

  • Если вы поддерживаете отдельные каталоги для каждой версии, вам нужно добавить код для поддержки этого. Дисковое пространство не предназначено для подпитки обновлений. Я помню одно приложение Citrix, на котором одновременно было 5 разных версий на моем компьютере. Пользователь не должен видеть более двух копий (максимум одной резервной копии, подтвержденной как работоспособную) вашего приложения в своей файловой системе, если они явно не разместили их там. Ярлыки в вашем приложении могут устареть, когда расположение папки меняется следующим образом, поэтому будьте осторожны.

  • Если вы обновляете после запуска программы, я бы порекомендовал уведомить пользователя ненавязчивым образом . Если обновление не вызывает значительных изменений в функциональности, загрузите обновление в фоновом режиме, переключитесь на новую версию при следующем запуске приложения и оповестите пользователя о существенных изменениях (не используйте модальный диалог или воровство фокус). Не заставляйте пользователя нажимать кнопку, чтобы дать согласие на установку обновлений перед запуском приложения, и не заставляйте их перезагружаться для использования обновленной версии. Разрешить пользователям настраивать автоматические обновления, а затем делать это, не влияя на их производительность. Firefox довольно плох по этому поводу, что печально, поскольку это такое неотъемлемое приложение для многих пользователей.

  • Не прикасаться к системному лотку . Это должно быть зарезервировано для полезных (для пользователя) приложений. Я также рекомендовал бы против уведомлений воздушного шара, а также. Используйте что-то вроде информационной панели, обычно встречающейся в браузерах. Приложения Microsoft особенно плохо используют системный трей и всплывающие уведомления, чтобы тратить время пользователя на неважные уведомления. Если пользователь включил автоматическое обновление, ему действительно не нужно знать, что все работает так, как он ожидал. Скажите им, когда есть что-то новое или полезное, и не навязывайте знания им в горло Оставьте журнал изменений в пункте меню «Справка», чтобы они могли самостоятельно проверять исправления ошибок.

  • Будьте осторожны с обновлениями с использованием системы MSI, если вы развертываете файл конфигурации по умолчанию. Вы не хотите перезаписывать пользовательские файлы в своем обновлении . В том же духе, если формат файлов конфигурации или пользовательских файлов изменяется, вы должны предоставить механизм для автоматического резервного копирования и обновления этих файлов. Или начните создавать настройки по умолчанию внутри приложения вместо их развертывания.

  • Будьте внимательны к пропускной способности . Большие файлы занимают время и, возможно, измеряют пропускную способность у ваших пользователей. Особенно, если вы обновляете ежедневно.

Я не могу вспомнить действительно ненавязчивую процедуру обновления, но я могу вспомнить множество вещей, которые тратили мое время и ресурсы в прошлом. Не будь парнем, который делает другого.

7 голосов
/ 17 января 2009

Недавнее сообщение в блоге от команды Chromium - отличное руководство:

http://blog.chromium.org/2009/01/google-chrome-installation-and-updates.html

По сути, то же самое происходит, когда вы используете ClickOnce от MS, и у меня пока нет проблем с использованием приложений с таким методом обновления, поэтому я предполагаю, что это классифицируется как «Лучшая практика» ... но это только я.

  1. Храните каждую версию в своей уникальной папке.
  2. Используйте "Launcher", чтобы запустить самую последнюю доступную версию и ...
  3. Проверьте наличие новых версий в фоновом режиме после запуска приложения.
  4. Загрузите любую найденную новую версию и создайте новую папку для этой версии.

Google Chrome немного отличается, поскольку для обновления используется служба Центра обновления Google, но общий опыт / цикл практически одинаков.

Ваш пользователь запускает приложение. Если доступна новая версия, оно загружается в фоновом режиме. И затем в следующий раз, когда приложение запускается, ваш пользователь автоматически получает новую версию и (если возможно) молча.

1 голос
/ 17 января 2009

Использовать существующий фреймворк

В MacOS X: используйте платформу Sparkle, http://sparkle.andymatuschak.org

В Linux: создайте пакеты и установочные репозитории для поддерживаемых дистрибутивов

...