Как включить автоматическое обновление в кросс-платформенном приложении Qt?
Я люблю приложения, которые могут обновить себя без каких-либо усилий со стороны пользователя (кажется: Искра framework для Mac). Есть ли какой-либо код/библиотека, которую я могу использовать для этого в приложении Qt, не беспокоясь о деталях ОС?
по крайней мере для Windows, Mac и пользовательских двоичных файлов Linux.
Я мог бы интегрировать Sparkle в версию Mac, кодировать что-то для случая Linux (только для автономного, принадлежащего пользователю двоичного файла; я не буду мешать с распределение упаковка, если моя программа когда-либо упакована), и найти кого-то, кто поможет мне на стороне Windows, но это ужасно больно.
11 ответов
это не полное решение, но кросс-платформенный (Windows, Mac, Linux) инструмент для создания пакетов для автоматического обновления и их установки доступен вhttps://github.com/mendeley/Update-Installer. Этот инструмент не занимается публикацией обновлений или их загрузкой.
это было написано для использования с приложением на основе Qt, но чтобы сделать установщик обновлений маленьким, автономным и простым в сборке, установщик использует только стандартные системные библиотеки (C++ среда выполнения, pthreads / libz/libbz2 на Linux / Mac, Win32 API на Windows, Cocoa на 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-задание для повторного добавления репозитория, если это необходимо.
промоушен: пылом, простое многоплатформенное (Qt-based) приложение autoupdater, вдохновленное Sparkle.
бесстыдный плагин: это относительно старый вопрос, но я подумал, что может быть полезно упомянуть библиотеку, которую я недавно создал, которую я назвал "QSimpleUpdater". Помимо уведомления вас, если есть более новая версия, она позволяет загружать журнал изменений в любом формате (например, HTML или RTF) и загружать обновления непосредственно из вашего приложения с помощью диалогового окна.
Как вы можете ожидать от проекта Qt, он работает на любой платформе, поддерживаемой Qt (протестирован на Windows, Mac & Linux.)
ссылки:
скриншоты:
хотя он работает немного иначе, чем Sparkle,BitRock InstallBuilder содержит autoupdater, написанный на Qt, который может использоваться независимо (отказ от ответственности, я оригинальный разработчик BitRock). Это коммерческое приложение, но у нас есть бесплатные лицензии для проектов с открытым исходным кодом.
Я нашел WebUpdate чтобы быть очень полезным, хотя он написан с помощью wxWidgets. Но не волнуйтесь, это отдельное приложение, которое обрабатывает ваши обновления. Шаги по его интеграции довольно просты - просто напишите два XML-файла и запустите программу обновления. И да, это кросс-платформенный.
преимущество в том, что он будет автоматически загружать и распаковывать/устанавливать все, что вам нужно, а не просто предоставлять всплывающее окно с уведомлением о новой версии и ссылкой для ее загрузки. Еще одна вещь вы можете сделать это настраиваемым действиям.
главная страница проекта -здесь, вы можете прочитать docs или взгляните на чиновника учебник.
Я разработал библиотеку автоматического обновления, которая прекрасно работает на Mac OS X, Linux и практически на каждом Unix, что позволяет разблокировать файл, пока файл все еще открыт. Причина в том, что я просто извлек загруженный пакет поверх существующего приложения. К сожалению, поскольку я полагался на эту функциональность, я столкнулся с проблемами в Windows, так как Windows не позволяет разблокировать открытый файл.
единственная альтернатива, которую я мог найти, - использовать MoveFileEx с заменить на флаг перезагрузки, но это ужасно.
однако переименование рабочего каталога приложения работает в Windows 7 и Windows XP. Я еще не пробовал Windows Vista.
в блоге смешивание какао и Qt может решить проблему для платформы Mac.
можно использовать ли updatenode, который дает вам все возможности для обновления программного обеспечения. Он использует кросс-платформенный Qt-клиент и является бесплатным для Open Source!
обновление Просто сделал некоторый дальнейший анализ этого и действительно нравится это решение:
плюсы:
- бесплатно с открытым исходным кодом!!! Даже клиент с открытым исходным кодом: https://github.com/updatenode/unclient
- клиент уже локализовано на нескольких языках
- очень гибкий с точки зрения обновлений. Вы даже можете обновить отдельные не двоичные файлы.
- дополнительно предоставляет способ отображения сообщений, хотя клиент.
- готов к использованию двоичных файлов и установщика для всех распространенных дистрибутивов Linux, одного двоичного файла Windows, а также установщика и решения для Mac (которое я не пробовал, так как у меня нет Mac)
- простой в использовании веб-сервис, хорошая статистика и проверка обновлений интегрированной в течение нескольких минут
плюсы:
- мне не хватает многопользовательского управления в онлайн-сервис. Возможно, они сделают это в будущем - я обязательно предложу это в своем портале отзывов
- клиент-только клиент GUI-поэтому вам нужно будет сжать его, чтобы запустить без интерфейса GUI (возможно, только для таких людей, как я; -))
Итак, итог, поскольку это решение довольно новое, я думаю, что есть здесь большой потенциал. Я обязательно буду использовать его в своем проекте, и я с нетерпением жду от них большего! Недурно!
Я предлагаю вам прочитать плагин и как их создавать и использовать. Если ваша архитектура приложения модульная и разбита на разные плагины. Взгляните на Google Auto Update utility http://code.google.com/p/omaha/. Мы используем это.
Тибо Кювелье пишет учебник (на французском языке) для разработки средства обновления. Я знаю, что объяснения на французском языке (и все не понимают французский), но я думаю, что это можно прочитать с помощью веб-переводчика, такого как Google Translate. При этом у вас будет кроссплатформенный апдейтер, но писать его нужно самостоятельно.
для того, что я знаю, единственная часть обновления, которая объясняется в учебнике, - это часть загрузки файла. В случае, если это может помочь вам, обратитесь к учебнику, un updater avec Qt.
надеюсь, это поможет.