Подтвердить что ты не робот

Как включить автоматическое обновление в кросс-платформенном приложении Qt?

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

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

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

4b9b3361

Ответ 1

ОК, поэтому я предполагаю, что я воспринимаю это как "нет (кросс-платформенный) способ". Это слишком плохо!

Ответ 2

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

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

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

  • Если вы строите только две платформы, подумайте об использовании стандартных и проверенных фреймворков автоматического обновления для этих платформ - например. Sparkle на Mac, Google 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 и использования его для подписи двоичного файла updater.
  • В Windows Vista/7 приложение .exe или DLL не может быть удалено, если оно используется, но программа обновления может переместить существующую .exe/DLL извне во временный каталог и назначить ее для удаления при следующей перезагрузке.
  • В Ubuntu сторонние репозитории отключены после обновлений дистрибутива. Google работает вокруг этого, создавая cron-задание для повторного добавления репозитория, если это необходимо.

Ответ 3

Бесстыдный плагин: Fervor, простой многоплатформенный (Qt-основанный) приложение autoupdater, вдохновленное Sparkle.

Ответ 4

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

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

Ссылки:

Скриншот:

enter image description here

Ответ 5

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

Ответ 6

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

Плюсы:

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

Минусы:

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

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

Ответ 10

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

Ответ 11

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

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

Я надеюсь, что это поможет.

Ответ 12

Это старый вопрос, но в ответах нет белка, который является ЛУЧШИМ РЕШЕНИЕМ, вот что я делаю в qt 5.12.4 с qt quick "my qml app" можно сделать это на любом другом языке

Я делаю это в Windows, есть Mac-версия белка тоже, я не знаю о Linux

  1. скачать релиз Nuget Package Explorer https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases
  2. откройте проводник пакетов nuget и добавьте этот каталог 'lib/net45'. Неважно, есть ли у вас приложение .net или нет, я сделал это для своего приложения qt, иначе оно не будет работать.
  3. добавьте все файлы в эту папку, укажите свою версию в метаданных
  4. сохранить файл nupkg
  5. скачать релиз белка https://github.com/Squirrel/Squirrel.Windows/releases
  6. добавить белка в путь среды Windows
  7. открыть cmd и cd в каталог файла nupkg
  8. squirrel --releasify file_name.nupkg → теперь в папке релизов должен быть файл setup.exe, который установит приложение и другие файлы.
  9. чтобы создать новую версию, выполните 2,3,4,7,8 еще раз, если при ее обновлении будет создан дельта файл, который требуется только для обновления, поместите эти файлы в каталог службы, например, в папку обновлений на вашем веб-сайте, которая вам нужна. чтобы отключить просмотр каталогов в IIS и автоматически обновить приложение, необходимо вызвать Update.exe, который находится в родительской папке корневого каталога приложения appdir/../update.exe --update http://yourserver.com/upates/, после того как приложение перезапускает приложение с новой версией
  10. .вы можете найти документацию по белкам в https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/getting-started/0-overview.md и обозревателе пакетов nuget здесь https://github.com/NuGetPackageExplorer/NuGetPackageExplorer, а также можете использовать только nuget.exe, если не хотите использовать обозреватель пакетов nuget, который можно использовать для динамического создания версий, которые могут быть загруженным с https://www.nuget.org/downloads

Это просто. Теперь у вас есть приложение автообновления, которое будет загружать обновления с сервера и приложение автообновления. Для получения дополнительной информации вы можете прочитать документацию.
примечание: для использования iis https://github.com/Squirrel/OldSquirrelForWindows/issues/205