Как мне реализовать автообновление? - PullRequest
62 голосов
/ 24 октября 2008

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

К сожалению, как бы я ни выглядел, я нигде не могу найти информацию об этом процессе. Похоже, что внедренные автообновители либо были проприетарными, либо не считались важными.

Кажется, довольно легко внедрить систему, которая ищет обновления в сети и загружает их, если они доступны. Эта часть автообновления будет существенно меняться от реализации к реализации. Вопрос в том, каковы различные подходы применения патчей. Просто скачиваете файлы и заменяете старые на новые, запускаете скачанный скрипт миграции, монтируете исправления частей системы и т. Д.? Концепции являются предпочтительными, но приветствуются примеры на Java, C, Python, Ruby, Lisp и т. Д.

Ответы [ 16 ]

0 голосов
/ 25 марта 2014

Если вы ищете решение для кроссплатформенного обновления программного обеспечения, взгляните на www.updatenode.com

Некоторые основные моменты:

  • бесплатно для проектов с открытым исходным кодом
  • кроссплатформенный и открытый клиентский инструмент обновления
  • локализован уже для самых важных языков
  • легко интегрируется и прост в обращении
  • облачная платформа управления для определения и управления обновлениями
  • обеспечивает дополнительную поддержку для отображения сообщений (информирование о новых событиях, продуктах и ​​т. Д.)
  • веб-интерфейс открыт (вы можете создать свой собственный клиент с помощью сервиса)
  • много статистики использования, таких как используемые операционные системы, географическое положение, использование версий и т. Д.
  • Обновления Android API для мобильных приложений

Просто попробуйте.

Кстати, я являюсь частью команды разработчиков для клиента с открытым исходным кодом. :)

0 голосов
/ 30 января 2009

Я собираюсь принять ответ для Windows.

Этот способ, кажется, работает хорошо.

В установщике выполните:
1. Создайте службу ручного запуска, которая запускается как LocalSystem, и при запуске обновление останавливается.
2. Измените разрешения службы, чтобы все пользователи могли запускать службу (если все пользователи должны иметь возможность обновлять без прав администратора).
3. Измените основную программу, чтобы проверить наличие обновлений при запуске с использованием простого механизма. Если оно обнаружит обновление, подскажите, хочет ли пользователь его применить.
4. Если пользователь принимает обновление, запустите службу.

Если архитектура допускает это, создайте способ мониторинга обновления во время его работы.

0 голосов
/ 28 января 2009

Вы можете написать внутренний модуль вашего приложения для выполнения обновлений. Вы можете написать внешнее мини-приложение для обновления.

Также обратите внимание на технологию компиляции .NET на лету, которая позволяет создавать такие мини-приложения на лету по запросу. Например, http://fly.sf.net/

0 голосов
/ 28 января 2009

Функция установки исправления в программу является одной из основных функций установщика. Программное обеспечение установщика задокументировано во многих местах, но обычно для каждого установщика: там Microsoft Installer (с установочными расширениями), Ruby gems , Java .jar файлы, различные системы управления пакетами Linux ( RPM , Apt-get ) и другие.

Это все сложные системы, которые решают проблему исправления программы в целом, но для немного разных систем. Чтобы решить, что лучше для вас, подумайте, на какую из этих систем ваше приложение больше всего похоже. Хорошая работа - это хорошо, но начинать с этих систем - только начало.

0 голосов
/ 28 января 2009

Чтение ответа Карла Селеборга дало мне несколько идей о том, как может быть полезен универсальный репозиторий кода.

svn поставляется с инструментом svnsync, который ведет себя как экспорт svn, но отслеживает реальную ревизию вашего экспорта.

Кто-то может использовать эту систему, чтобы получать только измененные файлы из фактической ревизии пользователя.

На самом деле у вас будет хранилище с скомпилированными двоичными файлами, а запуск svnsync будет извлекать только двоичные файлы, которые были изменены. Он также может объединить локальные изменения в текстовые файлы конфигурации с новыми параметрами конфигурации.

0 голосов
/ 28 января 2009

В настройке Java-Webstart вы запускаете файл JNLP, который затем запускает загрузку файлов Jar, необходимых для запуска приложения. Каждый раз веб-запуск проверяет, есть ли более новые версии Jars, и загружает ли их, заменяя локально кэшированные. С помощью инструмента jardiff вы будете создавать только diff-файлы для более новых jar-файлов и распространять их через сервер (например, только получать обновления).

Плюсы:

  • всегда в курсе

Минусы:

  • вам нужен сервер приложений (tomcat, JBoss) для распространения файлов
  • вам нужно подключение к интернету, чтобы получить заявку
...