使用捕获运行时更新AIR应用程序机制的逻辑是什么? 应该为Windows和Mac分发应用程序。
我被困在这里:
请注意,这并不一定意味着您需要实现自己的自动更新机制。如果使用商业工具来创建安装程序,则可能包含可以利用的自动更新机制。另一方面,如果您确实需要编写自己的更新机制,则应该在实现中找到URLStream,File和NativeProcess API。
阅读后:http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html
是否类似(对于Windows,在应用程序安装了一些.exe或.msi安装程序后):
应该在启动app之前强制更新。
如何覆盖正在运行的应用?或者制作另一个应用程序(更新程序)来替换文件,之后用NativeProcess启动主应用程序?
答案 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将管理更新。