Как создать программу обновления для приложения AIR в комплекте с незаполненной средой выполнения? - PullRequest
6 голосов
/ 02 марта 2012

Какова была бы логика обновления механизма для приложения AIR с незаполненным временем выполнения?Приложение должно распространяться для Windows и Mac.

Я застрял здесь:

Обратите внимание, что это не обязательно означает, что вам нужно реализовать собственный механизм автообновления.Если вы используете коммерческий инструмент для создания вашего установщика, он может включать механизмы автоматического обновления, которые вы можете использовать.С другой стороны, если вам нужно написать собственный механизм обновления, вы должны найти API-интерфейсы URLStream, File и NativeProcess удобными в реализации.

после прочтения по адресу: http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html

Это что-то вроде (для Windows, после того, как приложение установлено с каким-либо установщиком .exe или .msi):

  1. при запуске приложения, проверьте наличие новой версии
  2. , еслиесть новая версия, скачайте ее
  3. перезаписать существующие файлы приложения и файлы среды выполнения AIR

Перед запуском приложения необходимо принудительное обновление.

Как перезаписать запущенный файлприложение?Или сделать другое приложение (средство обновления) для замены файлов и после этого запустить основное приложение с помощью NativeProcess?

Ответы [ 4 ]

3 голосов
/ 17 июля 2012

Для Windows я использую Native Application Updater

http://code.google.com/p/nativeapplicationupdater/

и архив WinRAR SFX (.exe) для автоматического обновления моих неиспользуемых приложений времени выполнения.

Native ApplicationUpdater проверит версию, загрузит ваш новый exe, закроет ваше приложение и запустит этот новый exe.

В опциях SFX:

Я использую абсолютный путь, что-то вроде:% USERPROFILE% \ AppData\ Local \ com \ thenewkid \ appname \

В разделе «Режимы» вы можете выбрать «Скрыть все» в беззвучном режиме.В разделе «Настройка» вы можете запустить приложение application.exe после извлечения.

Размер обновления можно оставить на низком уровне, удалив папку Adobe AIR, пока не станет доступна новая версия SDK (т. Е. Просто нажмитенедавно было выпущено более крупное обновление для 3.3)

Для MAC я использую Installer.Он не такой тихий, как Windows Updater, так как пользователю придется нажимать на пару приглашений установщика, но он позволяет вам поместить его в домашний каталог, чтобы не требовались административные привилегии, что я считаю наиболее полезным аспектомВремя выполнения в неволе.

2 голосов
/ 02 марта 2012

По сути, ваше приложение должно указывать на какой-нибудь файл XML на вашем сервере, который будет содержать такие вещи, как номер последней версии, путь к новым файлам на сервере и т. Д.

Вы можете использовать отдельное приложение для выполненияперезапустите, но имейте в виду, что, поскольку вы используете Captive Runtime, это будет означать еще 40-60 МБ только для средства обновления (если вы не используете некоторые нерекомендованные хаки).

Вероятно, было бы лучше просто предложить пользователюперезапустить после загрузки обновления.

Хитрость заключается не в перезаписи EXE-файла, а в перезаписи SWF-файла (и любых других файлов, требующих обновления).Из того, что я могу сказать, EXE - это просто указатель на манифест XML и SWF.

Не следует обновлять файл времени выполнения AIR каждый раз - только для критических обновлений (так как это большие файлы).

1 голос
/ 09 января 2013

Для перезапуска AIR в автономной среде это работает для меня на Mac (еще не проверено для Windows) (Примечание. UpdateAutoTest было названием моего приложения):

var appLauncher:File;
                appLauncher = new File(File.applicationDirectory.nativePath).parent.parent.resolvePath("Contents").resolvePath("MacOS").resolvePath("AutoUpdateTest");

            var npInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo;
            npInfo.executable = appLauncher;
            var _args:Vector.<String> = new Vector.<String>;
            //_args.push("-a");

            //_args.push();
            npInfo.arguments = _args;
            var np:NativeProcess = new NativeProcess;
            np.addEventListener(NativeProcessExitEvent.EXIT, npExitHandler);
            np.start(npInfo);
            exit();
0 голосов
/ 02 марта 2012

Нет необходимости перезаписывать.Попросите пользователя загрузить новый пакет и запустить его.AIR узнает, что пакет уже установлен как предыдущая версия, и предложит пользователю обновить его.Таким образом, рабочий процесс таков: проверьте, есть ли более новый пакет, предупредите пользователя, что он есть, попросите его загрузить и запустить его.Air будет управлять обновлением.

...