Это не полное решение, но кроссплатформенный (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 для повторного добавления хранилища в случае необходимости.