Actionscript 3 如何为与captive runtime捆绑的AIR应用程序创建更新程序?

Actionscript 3 如何为与captive runtime捆绑的AIR应用程序创建更新程序?,actionscript-3,apache-flex,air,Actionscript 3,Apache Flex,Air,使用捕获运行时更新AIR应用程序机制的逻辑是什么? 应为Windows和Mac分发应用程序 我被困在这里: 请注意,这并不一定意味着您需要实现自己的自动更新机制。如果您使用商业工具创建安装程序,它可能包括您可以利用的自动更新机制。另一方面,如果您确实需要编写自己的更新机制,您应该可以在实现中找到URLStream、文件和NativeProcess API 在以下网址阅读后: 是否类似(对于Windows,在应用程序安装了一些.exe或.msi安装程序后): 启动应用程序后,检查新版本 如果有新版

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

我被困在这里:

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

在以下网址阅读后:

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

  • 启动应用程序后,检查新版本
  • 如果有新版本,请下载
  • 覆盖现有应用程序文件和AIR运行时文件
  • 应该在启动应用程序之前强制更新


    如何覆盖跑步应用程序?或者制作另一个应用程序(更新程序)来替换文件,然后用NativeProcess启动主应用程序?

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

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

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

    下载更新后,最好只是提示用户重新启动

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


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

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

    和WinRAR SFX存档(.exe)来自动更新我的专属运行时应用程序

    本机应用程序更新程序将检查版本,下载新的exe,关闭应用程序并运行新的exe

    在SFX选项中:

    我使用绝对路径,类似于:%USERPROFILE%\AppData\Local\com\thenewkid\appname\

    在“模式”下,您可以在静默模式下选择“全部隐藏”。在“设置”下,您可以让它在提取后运行application.exe

    您可以通过删除AdobeAIR文件夹来保持较低的更新大小,直到SDK的新版本可用为止(即,最近不得不推出一个更大的3.3版本更新)


    对于MAC,我使用安装程序。它不像Windows Updater那样安静,因为用户需要点击几个安装程序提示,但它允许您将它放在他们的主目录中,因此不需要管理权限,这是我发现Capture runtime最有用的方面。

    对于在Capture runtime中重新启动AIR,这对我在Mac上很有用(尚未检查Windows)(注意:UpdateAutoTest是我的应用程序的名称):

    var-appLauncher:File;
    appLauncher=新文件(File.applicationDirectory.nativePath).parent.parent.resolvePath(“内容”).resolvePath(“MacOS”).resolvePath(“自动更新测试”);
    var npInfo:NativeProcessStartupInfo=新的NativeProcessStartupInfo;
    npInfo.executable=appLauncher;
    变量args:Vector.=新向量。;
    //_参数推送(“-a”);
    //_args.push();
    npInfo.arguments=_args;
    var np:NativeProcess=新的NativeProcess;
    np.addEventListener(NativeProcessExiteEvent.EXIT,npExitHandler);
    np.start(npInfo);
    退出();
    
    很抱歉,我没有放:在启动应用程序之前,应该强制更新。我不知道我是否理解您的答案……这是捕获运行时,我不能使用AIR更新框架。@Nemi:正如我所说,您可以使用另一个捕获运行时应用程序来执行重新启动,但这取决于您的情况,可能不值得额外的40-60MB。或者,您可以我可以尝试,但我记得我在让它正常工作时遇到了困难(我很确定我从来没有让它正常工作过)。我同意另一个俘虏的做法,它有很多MB。这种链接重新启动方法对.exe不起作用,但对.air文件起作用,所以对于我正在尝试做的事情来说是不可用的。
    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();