原著:Daniel Nelson
翻译:alphachi
由于支持错误修正和功能扩充,能够通过Internet更新的软件日益明显地被人们所认同。此外,无论是在最终用户的操作系统上选择了全部安装还是部分安装,这类软件都拥有可维护性。使用Director制作的项目非常适合进行Internet更新,尽管事先需要一些计划。本文所描述的技术能够对Director项目的任何部分进行错误修正,而且无需退出和重新运行放映机就可以扩充功能和添加资源,甚至更新updater本身。整个更新只需使用包含在Director包中的那些Xtra就可完成,而且能够穿过ftp安全防火墙进行。
技术介绍
Internet Updater是一个不与被更新项目共享任何资源的Director影片,它使用一个外部演员表来保存对所有被修改文件的描述。当用户选择了更新时,正在运行的影片将项目名称、当前影片的一个标记点以及在线更新文件夹的URL都存储在全局变量里,其中项目名称用于在更新服务器上搜索与其相关的更新,影片标记点用于指定更新后将要返回的位置。这三个全局变量允许updater处于写保护状态或在不被修改的前提下被任何项目使用。更新开始时,利用“go”命令跳转到updater影片中,不允许使用“play”和“play done”命令,因为很有可能发出“play”命令的剧本稍后也会被更新。此时存储当前所有更新的描述,注意这里使用了两个而不是一个文件来保存具体平台的更新信息(由于文件的格式完全相同,因此在使用两个文件保存的过程中几乎无需任何额外的工作—)。特定的更新描述会被下载并与本地的更新列表进行比较,任何还未被更新的文件将被下载,其相对于放映机的的路径及版本信息将被添加到本地列表中,而本地列表中与其版本不同的文件都会被下载且更新版本信息。如果早期版本被证明更有利于稍后的更新,则允许保留早期版本(有时确实需要这一特性)。整个过程中每个文件的更新都是连续的,以便于更新描述中的显示。如果出现网络错误或阻塞,那么此前已经更新的文件将无需再次下载。使用dowloadNetThing命令每次下载一个文件到指定位置;使用netDown命令保证某个netID下载完成;使用netError命令检测下载是否成功。更新本地的更新列表,将其写入一个外部演员表的域演员中,保存外部演员表,所有这些都在下一个文件开始下载之前全部完成。注意必须接受“文件已被下载”的命令,这样即使下载失败,程序依然能够继续起作用,以便Internet Updater稍后再次运行并完成更新。例如,若将一个新的外部演员表添加到了一个存在的DXR中,那么在当前更新纪录中,外部演员表应该位于DXR之前。整个过程中更新程序始终在运行,直到所有的文件完成更新,此时会提示用户,并返回调用影片。
可更新的Director项目的组织
当Director项目使用stub projector和外部演员表构建时,则非常适合于自动更新。使用外部演员表有利于减小DXR文件的体积,将剧本演员和数据演员分开有利于减小剧本演员的体积,因为在修正错误时,剧本比图像和声音更需要更新。包含导入数据和链接资源(如声音、图像和数字视频)的大型外部演员表可以存储在CD-ROM上,如果有任何修改的必要,只要下载一个单独的DXR文件即可,其中已被添加了一个包含最新数据的外部演员表。为了简化更新步骤并能够更新项目的所有部分,全部的DXR文件、影片剧本和父代剧本都应该被安装在最终用户的硬盘上。安装时应该采用自动(而不是手动)方式,以去除文件的只读属性。由于可执行代码无法替换自己,所以更新updater的步骤还应该包括下载不同名称(例如internet_updater.1.2.dxr)的新版本并更新调用updater的剧本演员,从而使其指向新的文件。
Internet Updater(上)
发布: 2007-1-25 16:35 | 作者: Daniel Nelson | 来源: 译自director-online.com | 查看: 189次
