Windows Installer XML 概述 (3)

Structure of the .wixobj file

编译程序为每个源文件生成相应的.wixobj文件, .wixobj文件是XML格式的文档,遵照WiX项目中objects.xsd schema的定义。.wixobj文件包含一个或多个节,每个节包含标记号和指向其他标记号的引用。

虽然标记号和引用是.wixobj文件中最重要的数据,但他们只是信息中很少的一部分。大多数.wixobj文件的主要内由<table/>, <row/> and <field/>组成,这些元素提供了Windows Installer安装包的原始数据。许多情况下,链接程序不但处理标记号和引用,还要使用和更新.wixobj中的原始数据。

但有趣的是,.wixobj文件schema (objects.xsd)使用了camel外壳,而源文件schema (wix.xsd)使用了Pascal外壳。 这种选择明确表示.wixobj文件不能被用户编辑。事实上,对于只能用Wix工具包处理的数据,用来定义这些数据的schema都使用了camel外壳。

candle - Windows Installer XML Compiler

candle.exe是Windows Installer XM的编译程序,candle.exe的任务是将作为输入的.wxs源文件预处理生成有效的符合WiX schema( wix.xsd )的XML文档。然后,每一个经后处理的源文件被编译成.wixobj文件。

编辑过程是比较简单的。WiX schema遵从简单的递归降序解析。编译程序处理每个单元,依次为.wixobj文件创建新新的标记号,计算必要的引用和生成原始数据。

第二版candle.exe与第一版基本相同。仅有的变更包括:使新的标记号和引用可以链接以及基于客户反馈的改变。两个版本不同的地方包括:新的.wixobj文件的格式由MSI改为XML格式,主键的创建放在了链接时间,二进制文件的导入放在了链接时间。

light - Windows Installer XML Linker

light.exe是Windows Installer XM的链接程序。light的任务是处理一个或多个.wixobj文件,从多个外部文件中提取元数据,创建Windows Installer安装包(MSI or MSM)。必要时,light还将创建.cab文件和嵌入到Windows Installer安装包的数据流。

链接程序开始搜索从命令行输入的.wixobj文件以找到入口节。若发现一个以上的入口节,light返回错误。错误返回是必要的,因为入口节定义了准备创建什么类型的Windows Installer安装包,MSI (<Product/>) 或者 MSM (<Module/>)。 不可能从一个链接操作创建出两个安装包。

当链接程序确定入口节时,将定义在每个.wixobj文件中的标记号储存在标记号表中。当找到入口节后,链接程序通过寻找标记号表中的所有标记号试图处理该节中的所有引用。当发现标记号在不同的节中,链接程序递归连处理新节中的标记号。这个过程要搜索必要的节以解决引用的全部嵌套,直到所有的引用都满足为止。如果一个标记号在所有提供的.wixobj文件都没有找到,链接程序退出处理,并返回一个错误表示未定义的标记号。

所有的节找到之后,将处理复杂引用和反向引用。这个过程出现在以下场合:Components 和 Merge Modules 准备挂接其上一级的 Features,或者准备添加Merge Modules, Components到ModuleComponents表中。反向引用处理是为象Shortcut, Class, 和 TypeLib这类元素添加合适的Feature ID。

一旦所有的引用解决后,链接程序处理所有的行,检索引用文件的语言、版本号和hash值,计算媒体布局,以及包括一些必要的标准流程,以确保成功安装顺序。这部分的处理,结束前通常生成附加的行,以获得额外的与入口节的联系,来确保它们被打包到最终的Windows Installer安装包。

最后,light产生IDT文件,并将他们导入到Windows Installer安装包。 数据库创建完成后,最后一步是合并Merge Modules,如果需要,创建.cab文件。输出结果是一个完整功能的Windows Installer安装包。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值