具体实施方式
示例性操作环境
图1说明了适合在其中实现本发明的计算系统环境100的一个示例。计算系统环境100仅为合适的计算环境的一个示例,并非试图提出对本发明的使用或功能的范围的限制。也不应将计算环境100解释为关于示例性操作环境100中说明的任一组件或其组合具有任何依赖或需求。
本发明可以使用众多其它通用或专用计算系统环境或配置来操作。适合使用本发明的众所周知的计算系统、环境和/或配置包括但不限于:个人计算机、服务器计算机、手持式或膝上设备、输入板设备、多处理器系统、基于微处理器的系统、机顶盒、视频游戏、蜂窝或其它电话产品、可编程顾客电子设备、网络PC、小型机、大型机、包括任一上述系统或设备的分布式计算环境等等。
本发明可在计算机可执行指令的一般语境下描述,计算机可执行指令如程序模块,由个人计算机执行。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,执行特定的任务或实现特定的抽象数据类型。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和/或远程计算机存储媒质中,包括存储器存储设备。
参考图1,用于实现本发明的示例系统包括以计算机110形式的通用计算设备。计算机110的组件可包括但不限于,处理单元120、系统存储器130以及将各类系统组件包括系统存储器耦合至处理单元120的系统总线121。系统总线121可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线结构的本地总线。作为示例而非局限,这类结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机110通常包括各种计算机可读媒质。计算机可读媒质可以是可由计算机110访问的任一可用媒质,包括易失和非易失媒质、可移动和不可移动媒质。作为示例而非局限,计算机可读媒质包括计算机存储媒质和通信媒质。计算机存储媒质包括以用于储存信息的任一方法或技术实现的易失和非易失,可移动和不可移动媒质,信息如计算机可读指令、数据结构、程序模块或其它数据。计算机存储媒质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它媒质。通信媒质通常在诸如载波或其它传输机制的已调制数据信号中包含计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送媒质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信媒质包括有线媒质,如有线网络或直接连线连接,以及无线媒质,如声学、RF、红外和其它无线媒质。上述任一的组合也应当包括在计算机可读媒质的范围之内。
系统存储器130包括以易失和/或非易失存储器形式的计算机存储媒质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基础例程,通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图1说明了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动/不可移动、易失/非易失计算机存储媒质。仅作示例,图1说明了对不可移动、非易失磁媒质进行读写的硬盘驱动器141、对可移动、非易失磁盘152进行读写的磁盘驱动器151以及对可移动、非易失光盘156,如CD ROM或其它光媒质进行读写的光盘驱动器155。可以在示例性操作环境中使用的其它可移动/不可移动、易失/非易失计算机存储媒质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动存储器接口,如接口140连接到系统总线121,磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口,如接口150连接到系统总线121。
图1讨论并说明的驱动器及其关联的计算机存储媒质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,说明硬盘驱动器141储存操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以与它们不同。这里对操作系统144、应用程序145、其它程序模块146和程序数据147给予不同的序号来说明至少它们是不同的副本。用户可以通过输入设备,如输入板或电子数字化仪164、麦克风163、键盘162和指向设备161(通常指鼠标、轨迹球或触摸板)向计算机110输入命令和信息。图1未示出的其它输入设备可包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的用户输入接口160连接至处理单元120,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口,如视频接口190连接至系统总线121。监视器191也可以与触摸屏面板或其类似物组合。注意,监视器和/或触摸屏面板可以物理地耦合至结合计算设备110的外壳,如平板类型的个人计算机。另外,诸如计算设备110的计算机也包括其它外围输出设备,如扬声器197和打印机196,通过输出外围接口194或其类似物连接。
计算机110可以在使用到一个或多个远程计算机,如远程计算机180的逻辑连接的网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,并通常包括许多或所有上述与计算机110相关的元件,尽管在图1中仅示出了存储器存储设备181。图1描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但是也可以包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或其它装置,用于通过WAN 173,如因特网建立通信。调制解调器172可以是内置或外置的,通过用户输入接口160或其它合适的机制连接至系统总线121。在网络化环境中,描述的与计算机110相关的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图1示出了远程应用程序185驻留在存储器设备181上。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
包内增量压缩
本发明部分地一般针对一种方法和系统,提供文件和增量压缩文件(以下称为增量)的自含包,当提取时,产生安装器或其类似物更新计算机系统所需的文件。由此,这里的许多示例将一般针对提供更新包。然而,可以理解,除更新以外,还有许多对这类产品的使用。例如,依照本发明的一个方面,可以将诸如一套软件应用的全新安装提供为文件和增量压缩文件的自含包。其它数据文件同样可以从本发明的系统和方法中获益,尽管本发明往往在减小包含诸如随情形变化而变化的许多可执行文件和/很大程度上等效的文件的包的大小方面起到很好的作用。此外,如这里所使用的,术语“文件”或“多个文件”可包括常规地被认为是文件的东西,但是实际上也可包括数据的任一集合,如不必要地安排为常规文件系统文件的股票指数、字节流等等。
此外,尽管这里描述的包指自含的,然而可以容易地理解,包不需要完全自含来从本发明获益。本发明可以与增量的常规使用相组合。可以构造包含将现有文件用作基础文件的增量的混合物。从这一增量合成的文件然后可以用作包内另一增量的基础。例如,可以知道用户在给定计算机上具有的哪些文件,如读取包的内容的自提取程序,可能是通常在用户的计算机系统中存在的操作系统组件,从而该程序不需要作为包的一部分包括在内。同样,可能已知一个给定文件版本在顾客的计算机中存在,如,如果更新是针对当前只能为一个版本的文件。基于这一知识,包生产过程有时候可以避免必须包括特定的数据,从而进一步减小包的大小。
一般而言,如图2所示,本发明的一个方面在包生产环境200中操作,以试图将包需要包含的数据的大小最小化(至少至一个合理的程度)的方式构造包括文件和增量的自含包内增量压缩包202。为此目的,提供了一组源文件204,可包括包想要包括的新文件版本,(但是可能包含生成增量所需要的任一较旧文件版本)。这些源文件204一般与客户需要具备的目标文件相应。一般而言,如下所述,依照本发明的一个方面,制作包内增量(IPD)机制206首先将源文件204处理(如,通过读取其列表)为基础文件和/或增量。然后,MakeCAB(机箱文件)机制,可以是常规进程,将基础文件和/或增量数据压缩为自含包202。也可以使用其它压缩技术。
注意,当前技术需要文件的较旧版本来生成增量。例如,用于增量压缩的已知技术将原始文件(或其一些较后版本)与新版本一起输入到生成增量文件的增量创建引擎中;随后在客户端将该增量应用到原始版本来重新创建新版本。这些技术以及能获得更好压缩的改进在名为“将比较和压缩执行为单个处理的文件更新(File update performing comparison and compression as single process)”的美国专利号6,496,974;名为“下载软件安装的更新的方法和系统(Method and system fordownloading updates for software installation)”的美国专利号6,493,871;名为“对补丁生成和压缩预处理参考数据流(Preprocessing a reference data stream for patchgeneration and compression)”的美国专利号6,466,999;名为“通过使用不同于解压辅助数据预初始化压缩器/解压器的文件更新(File update by pre-initializingcompressor/decompressor with other than decompression aid data)”的美国专利号6,449,764;以及名为“使用较小补丁文件更新软件的方法和系统(Method and systemfor updating software with smaller patch files)”的美国专利号6,243,766;以及名为“使用在标准化相应原始安装过程中创建的副本之间的差异之后的同一更新数据来升级原始文件的副本的方法(Method for upgrading copies of and original file withsame update data after normalizing differences between copies created during respectiveoriginal installations)”的美国专利号6,216,175中有描述。
依照本发明的一个方面,并如下所述,一般而言,不需要对用来生成增量的基础文件的身份作出假设,其中,如这里所使用的,基础文件是随后向其应用增量来产生另一文件的任一文件。由此,与当前技术不同,任一文件,不仅是同一文件的较早版本,可以用作基础文件,通过应用增量可以从该基础文件合成另一文件。例如,取代从先前的文件版本和新文件版本生成增量,可以从对人类观察者来说看似为本质上不相关的文件生成增量。例如,结果可能是,对于给定的一组文件,可以将一个电子表格组件文件用作对增量的基础文件,当应用时,能够合成字处理组件文件。此外,可以用多个增量再次使用单个基础文件来合成多个合成文件。
因此,在一个实现中,源文件204不需要包括任一较旧文件版本,因为本发明的系统和方法可以使用仅从(一个或多个)较新文件版本衍生的增量。例如,在图2中,文件1可以是作为包204的一部分作为更新包括在内的新文件版本,并且可能用来从文件2生成增量a,从文件3生成增量b以及从文件4生成增量c。然后,当随后通过向文件1应用这些增量在客户顾客上提取时(如后文参考图6所描述的),四个目标文件,文件1-文件4在客户机器上可由设置程序或其类似物使用。注意,可以令一个包包含一个或多个用来合成其它文件的基础文件,然后丢弃这些文件,并且这些文件实际上不是最终文件组的一部分,并且例如,不被设置程序所使用,如后文所描述的。
依照本发明的另一方面,并且也参考图7在后文描述的,向其应用增量来合成文件的基础文件其自身可以是从先前的增量解压操作合成的。由此,例如,在图7中,文件2可以从文件1和增量a创建。然后,文件2用作向其应用增量b来产生文件3的基础文件。由此,本发明提供了许多新的概念,每一概念运作来提供包内所需要的数据量的减小。
此外,可以将文件版本用作用于生成另一文件版本的增量的基础文件,并在包内包括该基础文件用于如需要时的提取目的,即使该基础文件将会被删除并且不被设置程序所使用。例如,在图7中,文件1可以是用来创建增量的较旧文件版本,置于包内,并由提取程序210用来创建其它文件,但是然后在设置程序之前被删除。
转向附图的图3,示出了包生产环境200(图2)的一个实现中的组件。通常这一环境200通过一组一个或多个软件销售商的计算机或与需要生产包的销售商关联的某一第三方来实现。注意,这一生产环境200通常不是响应于客户请求而动态操作的,而是可能花费类似几个小时或几天的相对较长的时间来生产自含包202的计算上昂贵的进程。
一般而言,MakeIPD机制(制作IPD)206读取提供的文件列表212来确定哪些文件加入包内,以及哪里可以找到这些文件。例如,文件列表可包含[Files]段,其每一条目指定了包内的文件的名字,以及到该文件的全路径。文件列表也可以指定已知在用户计算机上存在的特定参考文件,这些文件不需要在当前的包内,但是可以用来构造上述的混合物。这些文件可以被认为是包内任何其它文件的潜在基础。
文件列表212也可以在如[Options]段中指定的一些处理选项。例如,可以提供“Run(运行)”伪指令(如作为经过清单文件的传递)来指定在提取以后应当执行包内的哪一文件(如果有的话)。可以设置“Verify(核实)”伪指令来引发MakeIPD机制对所有包文件生成[Verify]段。“PatchDLL”伪指令标识传递到清单文件的文件,同时引发MakeIPD机制206在创建机箱文件时使用的脚本中包括该文件,并且认为该文件是包内任何其它文件的潜在基础。
如图3所示,在一个实现中,总体生产进程从GUI或命令行304启动,GUI或命令行由分析程序306解释来确定操作参数。操作参数可包括标识文件列表212,如上所述,它标识如包含包内所需要的文件的名字的文件名的文本文件列表中要使用的源文件308。也可以提供路径信息来指定可能包含如下所述的所需要的符号文件的一个或多个目录(如,由分号隔开)。如果未指定,使用的目录为源文件的目录。
同样,可以指定另一操作参数—目录,用于使用在包构造过程中使用的各种中间文件。更特别地,MakeIPD机制206在处理过程中创建许多中间文件,并在指定的工作目录中维护。这类文件包括符号列表、增量文件和清单文件,将解法描述为一组增量解压指令。注意,如果随后运行MakeIPD机制206并且指定了同一工作目录,可以使用任何现存的文件来协助分析。例如,如果所有需要的文件仍可用,则MakeIPD机制206将在如几秒内迅速完成其操作。如果自从先前的构建以来仅一些包文件改变,重新使用未受影响的增量将节省可观的处理时间。
另一操作可指定创建如CAB压缩形式的最终包所使用的脚本的名字。其它操作参数可指定现有清单的位置,如下所述,可以导入该清单以从一些先前的运行复制解法。用户也可以指定处理过程中的不同类型的输出(如向用户或向文本文件),如,允许选择简明或详细输出,或禁止输出。
分析文件列表,其中,每一条目提供包内源文件的位置以及该源文件的名字。分析任一输入文件选项,可包括提取之后执行的文件的名字、用作提取程序的增量应用引擎(如DLL)的名字以及自提取机制是否应当在提取之后核实文件的签名(如MD5散列生成),(其中,MD5指RSA数据安全公司的消息摘要算法5,也称为因特网RFC 1321。可以使用任一合适的误差检测或完整性核实散列,包括CRC、MD5、SHA1等等)。
作为预处理的另一部分,如下所述,向文件列表添加用于清单文件的条目,以及用于增量应用引擎的条目。同样,对源文件308计算MD5签名,来将任何重复标识为原始发生的副本。如果该文件是可执行文件,则对其符号文件提取细节。
更具体地,上述美国专利号6,466,999描述了当使用增量时,对可执行文件(如EXE、DLL、OCX、SYS等等)使用符号来获得更优化的尺寸减小。MakeIPD机制206调节了这一技术,并在提供源文件的同一目录中查找符号。可以使用选项来明确地提供额外的符号目录,每一目录由分号隔开。递归地搜索每一指定目录来查找对分析有益的任何符号。扫描符号路径,查找任何标识的符号文件。
对于每一单独的源文件,MakeIPD机制206生成预期增量输入的列表,包括包内每一其它但独源文件的条目。这些列表将总共具有N·(N-1)或接近N2个条目。
依照本发明的一个方面,MakeIPD机制206的迭代程序组件312通过将文件和该文件的列表上的每一文件输入到增量创建引擎314,为每一文件列表上的每一预期增量创建增量。如果用于创建增量的输入都为可执行文件,则使用任一可用的符号信息来优化增量的大小,如上述美国专利号6,466,999中所描述的;(注意,一般而言,合适的增量创建引擎314在上述美国专利中描述)。这些增量315储存在工作目录中,并且每一增量的大小被添加到该列表条目,用于下一计算。
依照本发明的另一方面,从这一大小以及文件身份信息生成有向图316。更具体地,将每一源文件作为顶点添加到有向图316,并将每一预期增量作为边添加,其加权等于该增量的大小。所包括的还有从“空”顶点到每一源文件顶点的边,其加权等于该源文件的压缩大小。
作为示例,如图4所示,考虑从在四个源文件A、B、C和D上的迭代生成的有向图416。结合该信息的替代表格表示417能够看见,每一文件是一个顶点,每一预期增量是一个尺寸值,如,对使用文件A作为基础文件并使用文件B作为合成文件,增量的尺寸为ba,对于尺寸ab反之亦然。尺寸b仅用于压缩B,如,使用“空”顶点作为边。
从这一信息,可以在有向图316上计算最小生成树320。为此目的,可以采用各种众所周知的最小生成树计算318之一,一些具有几乎线性的运行时间。这类最小生成树计算在计算机科学文献中有描述,并且仅在这里简要描述。
概念地而言,每一文件从最小可用增量衍生。然而,重要的是不形成环型引用,如文件不能被用来合成其自身。排除特定的增量来打破这些循环。全局最优化该进程,使能够没收其它增量来允许使用另一更有希望的增量,来减小总的大小。这一问题映射到称为“有向最小生成树”的问题。可以使用对边加权的增量的节省,并搜索有向最大生成树来构造另一等效解。
然后,使用“空”顶点作为根来枚举生成树。离开根顶点的边对应于在包内简单压缩的文件。离开其它顶点的边对应于使用生成的增量压缩的文件。继续图4的示例,可以看见,将最小生成树420枚举为结果的解,其中,简单压缩A,压缩B并用作可以从其从合适的增量合成文件D的基础文件。进而,从合成的基础文件D以及用于从D生成C的合适的增量合成文件C。可以理解,当以这一方式使用时,基于尺寸作为加权的最小生成树提供了最小包的可能性。
返回至图3,枚举322本质上标记了每一源文件的解法(压缩或增量),并以在树中找出它们的顺序创建源文件的连接列表324。从这一连接列表324(以及上述其它文件信息),清单生成进程326如下所述地格式化清单文件328。本质上,当在客户计算机上运行时,清单文件332指引提取程序210的操作。注意,操作以特定的顺序在清单文件326中列出,并以该顺序执行,来确保提取程序不会运行到一个文件需要被合成来作为用于应用增量的基础文件而尚未存在的情况。例如,在图4中,在文件C可以从文件D合成之前,文件D需要从文件B合成。
另外,MakeIPD机制206包括伪指令文件生成组件330,它生成伪指令文件332,将从该文件创建压缩包。伪指令文件包含临时目录中源文件和增量的位置,以及包内这些文件的名字。压缩程序/封装程序334组件,如常规MakeCAB(制作CAB)机制208(图2),采用该伪指令文件来生成自含增量压缩包202。参数选项指定要创建的伪指令文件的路径和名字,以及使用该伪指令文件指定同一路径内具有同一基础文件名的CAB文件。
尽管图4的简化示例仅使用了四个文件,MakeIPD机制206能够花费相对较长的时间来分析包的内容。由此,当可能时,期望避免进程的迭代/分析部分。例如,当需要生成多个包时,每一个包概略地包含同一内容,可以使用先前运行的解法(如,在清单中维护)来更直接地指定当前包的解法。当在优化了第一个包之后为额外的语言生成包时可能出现这一情况。这一情况可用的另一时间是当由于内容中有小变化而重建包时。
为调节构造包的现有解法,MakeIPD机制206能够导入解法。例如,如果指定为参数选项,该参数可以指定能够找到清单文件的目录,或能够指定要使用的文件的完整文件名。
一般而言,当使用时,MakeIPD机制206的导入进程从某一先前创建的清单文件读取[Deltas]段,来看选择了哪些增量。更特别地,当导入解法时,读取导入的清单来生成预期增量输入的列表。引用该包内复制文件的任一条目作为替代被推断为原始文件。导入清单内标识复制的任一条目被推断为预期增量输入,反之亦然。这些列表一般在每一文件中仅有一个条目,或者说接近N个总条目。
可以容易地理解,当使用导入操作来指定解法文件时,大多数MakeIPD分析被绕过,因为仅使用先前选择的增量。注意,仅需要构造约N个增量,而不是N2个。如果新的包包含任一新内容,则不考虑这些文件用于增量。如果原始包已选择了一个特定文件作为增量参考,并且未在新的包中找到该文件,将不考虑这些增量。然而,应当理解,导入操作对具有很类似内容的包能起到最好的作用。
转到图5所示的自提取进程的解释,在顾客环境500,以某一方式,如通过网络传输或在诸如压缩或DVD-ROM盘的物理媒质中,接收自含包502的一个副本。注意,图5示出包生产者提供包,然而应当理解,可以有一个或多个中间物,如第三方批发商、令包对其它机器可用的企业网络等等。
一般而言,当以某一方式,无论通过GUI、网络脚本、命令行等等,执行可执行提取文件(如,在自含包中,但是可能已经在顾客机器上)时开始提取机制504。如需要,可以有指定的参数,并分析这些参数。
作为第一预处理操作,可执行程序可在本地硬盘,如具有最大空闲空间的硬盘上创建随机命名的临时目录506。另选地,可以如通过可任选的参数指定一个临时工作目录。
每一文件从机箱文件提取到临时目录506。作为这一提取的一部分,解压当创建机箱时所压缩的文件。注意,可能有在创建机箱文件之前已压缩的其它文件,并且在提取的第一部分中不解压这些文件。
此时,目录506包含一个或多个基础文件508、一个或多个增量5 10以及任何其它文件512,如当发现能够比使用增量压缩更有效地压缩时简单压缩的文件(如图4的示例中的文件A和B)。仍为压缩文件的任何文件可以在需要时被解压。本示例中,清单514、应用引擎516(如可能包括在包内的DLL)以及设置程序518(如果其自身不是合成的)也在目录506中可用。注意,可能不存在清单文件,这可能是文件的常规机箱压缩的情况,即,不使用包内增量压缩。
如在图5的示例中,在存在清单文件514时的情况,提取机制504处理清单514中列出的每一指令。对于其中所列出的每一增量510,将指定的增量510应用到指定的输入基础文件(如,基础文件508之一或先前合成的文件520)来创建新文件,在图5中由合成文件520表示。注意,应用引擎本质上是增量创建引擎的倒转,将基础文件作为一个输入,增量作为另一输入,并合成目标文件作为输出。与增量创建引擎类似,合适的应用引擎在上述美国专利申请中有描述。同样,如下所述,对于每一复制的文件,使用新名字作出指定文件的副本,而对于清单514中指定的每一删除模式,提取机制504删除临时目录506中匹配该模式的任何文件。这通常被用来在合成了所有文件之后丢弃增量。
作为示例,图6示出了通过具有单个基础文件的自含包所得的文件,对该基础文件应用三个增量a、b、c来合成三个文件,文件2、文件3和文件4。基础文件文件1可用作更新,尽管如上所述并非所需。一般而言,以标注的顺序跟随箭头,可以看到提取程序读取提取数据(如,清单),如需要,将基础文件解压到设置程序将用来安装这些文件的目录。然后结合每一增量a、b和c使用基础文件来分别合成文件文件2、文件3和文件4。
图7示出了一个稍微不同的示例,在该示例中,文件2从文件1和增量a合成,然后用作基础文件,与增量b一起合成文件3。文件4从该基础文件和增量c合成。
返回到图5,一旦目标文件完全可用,如果通过RUN伪指令将程序标记为设置程序518,则自动执行该程序。完成设置程序之后,提取机制检索并保存其返回代码。然后,提取机制504删除临时目录中创建的任何剩余文件,包括任何目录条目,并使用保存的设置程序返回代码退出。如需要,也可以删除提取机制504。
清单文件信息
在一个实现中,包内增量特点由清单文件启用。然而,可以容易地理解,指引提取机制的其它方法也是可行的。例如,可以使用其它合适的提取数据。另选地,例如,可以以某一方式对增量排序(如,以在机箱解压时放置在临时目录中的顺序等等),并以该顺序将增量应用到基础文件,其文件名从增量衍生或通过一组重命名操作改变。然而,如下所述,清单文件提供了一种直接且有效的方法来指引提取机制。
在这一特定的实现中,在内嵌的机箱文件中该文件被命名为“_sfx_manifest_”。当将机箱提取到临时目标目录时,提取机制寻找这一文件名,并使用其内容来指定完成提取之后要执行的各种处理。_sfx_manifest_文件不添加到目标目录,以不干扰设置程序。在完成这一额外的处理之后,开始设置程序。
在一个实现中,清单是一文本文件,组织为由方括号指示的段,尽管可以容易地理解,诸如标记语言格式的其它格式是等效的。每一段包含表示操作细节的行。定义了若干段名,包括[Deltas]、[Copy]、[Verify]和[Delete]。每一段包含对段特定的条目,依照它们所属的段来解释。段中的某些条目可以以预定的关键字开始,后者称为伪指令。
可以以任一顺序指定清单中的段,但是以[Deltas]、[Copy]、[Verify]然后[Delete]的顺序处理。每一段内,顺序地处理条目。由此,通过名字而不是它们在文件中的位置来找出支持的段。
在这一格式中,文件中的每一段从由括号包围的段名开始,并在新段的开始或在文件的末端结束。如果多于一个段具有同一名字,它们被逻辑地合并为单个段。段名、条目和伪指令是对情况不敏感的。其它规则是,段中的每一条目和伪指令以新行字符(十六进制的0x0A)结束或在文件的末端结束。注释以分号(;)字符开始,并在新行字符或文件末端结束。注释可以在行中自己出现,或在行中位于条目之后。使用逗号来分隔段的条目和伪指令中提供的值,并且可能需要等号来将“关键”值与其它参数分隔。
文件名条目与包的根相关,尽管在替换实现中可以支持绝对路径。包内子目录中的文件用相对路径来表示,如,驻留在“update”子目录的名为“update.exe”的文件被引用为update\update.exe。空行、行中的前导空白(空格、跳格等等)被忽略,好像引号外的空白。如果空格字符、逗号或等号是串的一部分,则该串在引号中。不在引号中的分号字符用于注释,其中,到该行的末尾的所有东西都被忽略。
需要包含空格或其它隔断字符的文件名或相对路径由双引号包含。不可以对段名加引号。以下是遵循上述规则的示例清单:
;Sample_sfx_manifest_for Q326863;This package contains eight closely-related files[Options]run=xpsplhfm.exe[Deltas]sp2ntkrnlpa.exe=sp2_ntkrnlpa_exe._p,sp2ntoskrnl.exesp2ntkrpamp.exe=sp2_ntkrpamp_exe._p,sp2ntkrnlpa.exesp2ntkrnlmp.exe=sp2_ntkrnlmp_exe._p,sp2ntkrpamp.exesp1ntoskrnl.exe=sp1_ntoskrnl_exe._p,sp2ntoskrnl.exesp1ntkrpamp.exe=sp1 ntkrpamp_exe._p,sp2ntkrpamp.exesp1ntkrnlpa.exe=sp1_ntkrnlpa_exe._p,sp2ntkrnlpa.exesp1ntkrnlm9.exe=sp1_ntkrnlmp_exe._p,sp2ntkrnlmp.exe[Delete]*._p[Verify]sp1ntkrnlmp.exe=1D575A38471CB066CC23925AEFCD9A49sp1ntkrnlpa.exe=89A0875AEA13E021C9E63F2EB6446327sp1ntkrpamp.exe=934AAC402BA1F8D1C9319AA0DB849E6Fsp1ntoskrnl.exe=C78CA71C81A051DF25A79102C867BB10sp2ntkrnlmp.exe=E62EA04019BC4AE785855DA0EE36D231sp2ntkrnlpa.exe=6C1BD8121224A83DC0FD9E36BFCF2AD9sp2ntkrpamp.exe=64F5029190445488347B204DF6A53A6Csp2ntoskrnl.exe=A7379A2180D3AA4F64D804D8B5CDD659 |
[Deltas]段描述了包内增量的核心特点,即如何从包内的其它文件合成设置所需要的一些文件。[Deltas]段中的条目的语法包括:
[Deltas]
{目标文件名}={增量文件名}[,{参考}]
其中,{目标文件名}是要生产的文件的名字,{增量文件名}是包内的增量文件的名字,{参考}是用作基础文件的现有文件的名字(如果有的话)。提取程序将增量文件应用到参考文件的一个副本,创建目标文件。
这一语法的一个示例包括:
[Deltas]
file2=file1_to_file2.delta,file1
在该示例中,file1需要包括在实际包内,或从某一先前的[Deltas]条目合成。可见,file1_to_file2.delta将应用到file1的一个副本,创建file2,而file1保持不变。通常,file1_to_ffle2.delta也包括在[Delete]段内,以在设置程序开始之前将其删除。
注意,可能具有“增量”而没有参考文件,这等效于基于零长度参考文件的增量。这类增量的条目仅省略了{参考}。
[Copy]段允许文件在包内复制。例如,如果设置进程需要三个具有不同名字的相同文件,可以在包内包括文件的一个副本,在设置之前复制其它两个。[Copy]段中的条目的语法包括:
[Copy]
{目标文件名}={源文件名}
其中,{目标文件名}是要生产的文件的名字,{源文件名}是具有相同内容的现有文件的名字。
示例包括:
[Copy]
file3=file2
在该示例中,file2包括在包内,或从先前的[Deltas]或[Copy]条目合成。可见,file2复制到file3,并且file2保持不变。
[Delete]段允许在设置程序开始之前删除设置不需要的文件。一个常见的使用是删除用来合成所需要的文件的任何增量文件。[Delete]段中的条目的语法为
[Delete]
{目标文件名}
其中,{目标文件名}是要删除的文件的名字。指定的{目标文件名}可能包含通配符,在这一情况下,匹配该模式的任何文件都被删除。如果没有文件匹配给定的名字或模式,则报告无错误。文件删除不是递归的;必须明确地命名子目录。
一个示例包括:
[Delete]
*.delta
在该示例中,匹配“*.delta”的文件被删除。
[Verify]段指定了某些文件要被校验看其是否损坏。该段中的每一条目命名要核实的单个文件,以及对该文件的预期MD5签名。如果不能核实该段中的任何文件,则安装失败。[Verify]段中的条目的语法包括:
[Verify]
{目标文件名}={MD5签名}
其中,{目标文件名}是预期在包内的文件的名字,{MD5签名}是该文件的MD5签名的十六进制表示。
一个示例包括
[Verify]
file1=3D2EDAF98C77086F18925193E471C1C8
file2=CCF3719A65DB9637864A4340A74575DE
file3=7BEB665C45858982E58D496C3A474CB2
在该示例中,计算每一文件file1、file2和file3的签名,并与指定的值比较。如果任一签名不匹配,或任一文件丢失,则安装失败。
有一些可以使用[Options]段中的特定伪指令控制的IPD选项。忽略未定义的伪指令。
[Options]
Run=update\update.exe ;要执行的程序
PatchDLL=update\nspatcha.dll ;更新的增量核心
Run=伪指令定义了要执行的设置程序的名字。提取程序已允许将程序标记为当创建机箱文件时使用伪指令文件中的/RUN选项执行。然而,要运行的程序可能不是机箱中的文件之一,但是可能作为基于其它文件之一的增量被封装。在这一情况下,在机箱内没有文件可标记。Run=伪指令标识要运行的程序,并且在功能上等效于在机箱内标记该文件。Run=伪指令覆盖了机箱内标记的文件(如果有的话)。
PatchDLL=伪指令定义了用来应用增量的DLL的名字。提取程序缺省使用Windows系统目录的mspatcha.dll,但是这一伪指令可以明确地命名来自包的一个替换文件。由于在清单中指定的文件与目标目录相关,这一DLL是原始包中的文件之一。[Delete]段通常包含一条目以在设置程序开始之前丢弃该DLL。
传统地,仅执行机箱包,其中扩充其内容、运行设置程序并清除其内容。由于各种原因,也可能期望扩充包的内容,但是不运行设置或清除操作。例如,销售商可能需要获取包中找到的一个或多个文件,但是不希望实际在这一计算机上安装该包。参数选项提供了这一特点,当使用时,提示用户目标目录(或使用/X:目标目录来明确给出)而内容简单地在那里扩充。
本发明的包内增量系统和方法也支持这一概念。当使用这一参数选项(或/X:目标目录)时,提取程序将提取内容而不运行设置程序。然而,当内容包括任何增量文件时,这些增量一般将不以其当前的形式使用的,因此包内增量处理仍按缺省执行,以将内容恢复其自然形式。
一些操作系统作出允许文件关联,其中,特定的程序可以与特定类型的文件关联。一些允许通过文件名后缀(“扩展名”)来关联,其它可能使用文件的其它属性。可以看见,这里描述的自提取包能够仅使用诸如机箱文件的文件集合来实现,当文件被激活时,依赖于文件关联来开始自提取进程。由此,自提取特点的可执行代码不需要必须是包的一部分。
从上述详细描述中可以看到,提供了一种可以在自含包中使用增量压缩来提供数据的方法和系统。显著地减小了包的大小,而自含包的优点对销售商和客户顾客可用。因此,该方法和系统提供了当代计算中所需要的优点和利益。
尽管本发明对各种修改和替换构造敏感,在附图中示出了其特定的说明实施例并在上文详细描述。然而,应当理解,并不意味着将本发明限制在所解释的特定形式上,而是相反,本发明覆盖了其精神和范围之内的所有修改、替换构造和等效物。
这里所引用的每一专利转让给本发明的受让人,并通过引用结合于此。