Как я могу включить автообновления в кроссплатформенном приложении Qt? - PullRequest
46 голосов
/ 16 января 2010

Мне нравятся приложения, которые могут обновляться без каких-либо усилий со стороны пользователя (подумайте: Sparkle framework для Mac). Есть ли какой-нибудь код / ​​библиотека, которую я могу использовать для этого в приложении Qt, не беспокоясь о деталях ОС?

По крайней мере для Windows, Mac и пользовательских бинарных файлов Linux.

Я мог бы интегрировать Sparkle в версию для Mac, написать что-нибудь для случая Linux (только для автономного бинарного файла, принадлежащего пользователю; я не буду связываться с дистрибутивом , если моя программа когда-либо упакована) ), и найти кого-то, кто поможет мне на стороне Windows, но это ужасно больно.

Ответы [ 11 ]

21 голосов
/ 11 сентября 2011

Это не полное решение, но кроссплатформенный (Windows, Mac, Linux) инструмент для создания пакетов для автообновлений и их установки доступен по адресу https://github.com/mendeley/Update-Installer. Этот инструмент не связан с публикацией обновлений или скачивая их.

Это написано для использования с приложением на основе Qt, но чтобы сделать установщик обновлений небольшим, автономным и простым в сборке, он использует только стандартные системные библиотеки (среда выполнения C ++, pthreads / libz / libbz2 в Linux / Mac, Win32 API на Windows, Какао на Mac, GTK с резервом на Linux). Это упрощает доставку обновлений, которые включают новые версии Qt и другие несистемные библиотеки, от которых может зависеть ваше приложение.

Прежде чем рассмотреть это, я бы предложил:

  • Если вы строите только для двух платформ, рассмотрите возможность использования стандартных и хорошо протестированных платформ автообновления для этих платформ - например. Sparkle на Mac, Google's Omaha в Windows или системах автоматического обновления, встроенных в популярные платформы установки (например, InstallShield). Я не пробовал BitRock.
  • На Mac может подойти Mac App Store. См. https://bugreports.qt.io/browse/QTBUG-16549 хотя.
  • В Linux рассмотрите возможность создания пакета .deb и простого репозитория для его размещения. Как только пользователи настроят репозиторий, общесистемные средства обновления программного обеспечения позаботятся о проверке и установке новых выпусков. Однако шаги по настройке нового репозитория слишком сложны для многих новых пользователей Ubuntu / Debian. То, что мы сделали, а также то, что сделали Dropbox и Google, - это создали пакет .deb, который настраивает хранилище как часть установки пакета.

Несколько других замечаний по созданию средства обновления:

  • В Windows Vista / 7, если приложение установлено в масштабе всей системы (например, в C: \ Program Files \ $ APPNAME), ваши пользователи увидят страшное приглашение UAC, когда программа обновления пытается получить разрешения на запись в установку. каталог. Этого можно избежать либо путем установки в каталог, доступный для записи пользователем (я так понимаю, что это то, что делает Google Chrome), либо путем получения сертификата Authenticode и использования его для подписи двоичного файла программы обновления.
  • В Windows Vista / 7 приложение .exe или DLL не может быть удалено, если используется, но программа обновления может переместить существующий .exe / DLL с пути во временный каталог и запланировать его удаление при следующей перезагрузке. .
  • В Ubuntu сторонние репозитории отключаются после обновления дистрибутива. Google решает эту проблему, создавая задачу cron для повторного добавления хранилища в случае необходимости.
9 голосов
/ 02 июня 2012

Бесстыдный плагин: Fervor , простой мультиплатформенный (на основе Qt) автообновитель приложений, созданный по мотивам Sparkle.

6 голосов
/ 16 января 2015

Бесстыдный плагин: это довольно старый вопрос, но я подумал, что было бы полезно упомянуть недавно созданную библиотеку, которую я назвал "QSimpleUpdater". Помимо уведомления о появлении более новой версии, он позволяет загружать журнал изменений в любом формате (например, HTML или RTF) и загружать обновления непосредственно из приложения с помощью диалогового окна.

Как вы можете ожидать от проекта Qt, он работает на любой платформе, поддерживаемой Qt (протестировано в Windows, Mac и Linux).

Ссылки:

Скриншот:

enter image description here

3 голосов
/ 08 мая 2011

Хотя он работает немного по-другому, чем Sparkle, BitRock InstallBuilde r содержит автообновление, написанное на Qt, которое можно использовать независимо (отказ от ответственности, я являюсь разработчиком BitRock). Это коммерческое приложение, но у нас есть бесплатные лицензии для проектов с открытым исходным кодом.

2 голосов
/ 20 марта 2014

Вы можете использовать UpdateNode , который дает вам все возможности для обновления программного обеспечения. Он использует кроссплатформенный клиент Qt и бесплатен для Open Source!

UPDATE Просто сделал дальнейший анализ этого и очень понравилось это решение:

Плюсы:

  • Бесплатно для Open Source !!! Даже клиент с открытым исходным кодом: https://github.com/updatenode/unclient
  • Клиент уже локализован на несколько языков
  • Очень гибкий в плане обновлений. Вы даже можете обновить отдельные недвоичные файлы.
  • Предоставляет дополнительно способ отображения сообщений через клиента.
  • Готовые к использованию двоичные файлы и установщик для всех распространенных дистрибутивов Linux, один двоичный файл Windows, а также установщик и решение для Mac (которое я не пробовал, так как у меня нет Mac)
  • Простой в использовании веб-сервис, хорошая статистика и проверка обновлений интегрированы в течение нескольких минут

Минусы:

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

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

2 голосов
/ 10 августа 2012

Я нашел WebUpdate весьма полезным, хотя он написан с помощью wxWidgets.Но не волнуйтесь, это отдельное приложение, которое обрабатывает ваши обновления.Шаги для его интеграции довольно просты - просто напишите два XML-файла и запустите программу обновления.И да, он кроссплатформенный.

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

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

2 голосов
/ 12 февраля 2011

Сообщение в блоге Смешивание какао и Qt может решить проблему для платформы Mac.

2 голосов
/ 04 апреля 2010

Я разработал библиотеку автообновления, которая прекрасно работает в Mac OS X, Linux и практически во всех Unix, что позволяет вам отсоединить файл, пока файл еще открыт. Причина в том, что я просто извлек скачанный пакет поверх существующего приложения. К сожалению, поскольку я полагался на эту функцию, я столкнулся с проблемами в Windows, поскольку Windows не позволяет отсоединить открытый файл.

Единственная альтернатива, которую я смог найти, - это использовать MoveFileEx с флагом замены при перезагрузке, но это ужасно.

Однако переименование рабочего каталога приложения работает в Windows 7 и Windows XP. Я еще не пробовал Windows Vista.

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

Thibault Cuvelier пишет учебник (на французском языке) для разработки средства обновления. Я знаю, что объяснения на французском (и все не понимают по-французски), но я думаю, что это можно прочитать с помощью веб-переводчика, например Google Translate . При этом вы получите кроссплатформенный апдейтер, но вам нужно написать его самостоятельно.

Насколько я знаю, единственная часть средства обновления, которая описана в руководстве, это часть загрузки файла. В случае, если это может вам помочь, обратитесь к руководству, Un Updater avec Qt .

Надеюсь, это поможет.

1 голос
/ 16 января 2010

Предлагаю вам прочитать на плагине и как их создавать и использовать. Если ваша прикладная архитектура модульная и разделена на разные плагины. Взгляните на утилиту автоматического обновления Google http://code.google.com/p/omaha/. Мы используем это.

...