如何为绑定运行时捆绑的AIR应用程序创建更新程序?

时间:2012-03-02 12:39:08

标签: actionscript-3 flex air

使用捕获运行时更新AIR应用程序机制的逻辑是什么? 应该为Windows和Mac分发应用程序。

我被困在这里:

  

请注意,这并不一定意味着您需要实现自己的自动更新机制。如果使用商业工具来创建安装程序,则可能包含可以利用的自动更新机制。另一方面,如果您确实需要编写自己的更新机制,则应该在实现中找到URLStream,File和NativeProcess API。

阅读后:http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html

是否类似(对于Windows,在应用程序安装了一些.exe或.msi安装程序后):

  1. 启动应用时,检查新版本
  2. 如果有新版本,请下载
  3. 覆盖现有的app文件和AIR运行时文件
  4. 应该在启动app之前强制更新。

    如何覆盖正在运行的应用?或者制作另一个应用程序(更新程序)来替换文件,之后用NativeProcess启动主应用程序?

4 个答案:

答案 0 :(得分:3)

对于Windows,我使用本机应用程序更新程序

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

和WinRAR SFX存档(.exe)自动更新我的强制运行时应用程序。

Native Application Updater将检查版本,下载您的新exe,关闭您的应用并运行该新exe。

在SFX选项中:

我使用绝对路径,例如:%USERPROFILE%\ AppData \ Local \ com \ thenewkid \ appname \

在“模式”下,您可以在静音模式下选择“全部隐藏”。在“安装程序”下,您可以在提取后运行您的application.exe。

您可以通过删除Adobe AIR文件夹来保持较低的更新大小,直到SDK的新版本可用(即最近必须推出更大的更新版本为3.3)

对于MAC我使用安装程序。它不像Windows更新程序那样安静,因为用户必须单击几个安装程序提示,但它允许您将其放在其主目录中,因此不需要管理特权,这是我发现最有用的方面俘虏运行时。

答案 1 :(得分:2)

基本上,您应该让您的应用程序指向服务器上的某个XML文件,其中包含最新版本号,服务器上新文件的路径等。

您可以使用单独的应用程序进行重新启动,但请记住,由于您使用的是Captive Runtime,这意味着更新程序只需要40-60MB(除非您使用一些非推荐的黑客攻击)。

在下载更新后,提示用户重启可能会更好。

技巧不是覆盖EXE而是覆盖SWF(以及需要更新的任何其他文件)。据我所知,EXE只是指向XML清单和SWF的指针。

您不应每次都更新AIR运行时文件 - 仅用于关键更新(因为它们是大文件)。

答案 2 :(得分:1)

为了在强制运行时重新启动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();

答案 3 :(得分:0)

无需覆盖。让用户下载新包并启动它。 AIR将知道该软件包已作为先前版本安装,并将提示用户是否要更新。 所以工作流程是:检查是否有更新的包,提醒用户有一个,让他下载并启动它。 Air将管理更新。