Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

原文:Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

关于WiX文件格式

.wxs是WiX的源文件扩展名。.wxs文件以类XML文件的格式来指定了要构造Windows Installer安装数据包.msi文件所需的信息。

.wxs的文件格式为:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
…
</Wix>

.wxs必须只有一个根元素,即<Wix>。在<Wix>下至多有一个下列的直接子元素:<Product>、<Module>或<Patch>;但是可以拥有不限个数的<Fragment>子元素。通过<Product>元素或<Fragment>元素的子元素即可指定Windows Installer安装包MSI文件的内容。

Wix是一个功能性的描述语言而非命令式规定性语言。各种元素可在不同地方进行描述,并且仅当它们之间存在依赖关系时,其中一个元素可以通过必须提供的唯一标识符来引用另一个元素。

HelloWorld的分析

下面我们对前面的案例HelloWorld的.wxs文件进行简单分析,这样就可以对.wxs有个基本的认识。为了方便,我们将该.wxs文件复制在下面。

Product.wxs

<?xml version="1.0" encoding="UTF-8"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
          <Product Id="*" Name="HelloWorld" Language="1033" Version="1.0.0.0" Manufacturer="LEH" UpgradeCode="1de12ee7-2e94-42ac-979f-06245a0ade30">
                    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
                    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

                    <Directory Id="TARGETDIR" Name="SourceDir">
                             <Directory Id="ProgramFilesFolder">
                                      <Directory Id="INSTALLFOLDER" Name="HelloWorld">
                                                <Component Id="ProductComponent" Guid="B5F0C012-49D6-4C63-AFCA-0CE6C24C6D7D">
                                                         <File Id="HelloWorld" Source="HelloWorld.exe" />
                                                </Component>
                                      </Directory>
                             </Directory>
                    </Directory>

                    <Feature Id="ProductFeature" Title="HelloWorld" Level="1">
                             <ComponentRef Id="ProductComponent" />
                    </Feature>
          </Product>
 </Wix>

在<Product>属性中,指定了安装包的五个必需属性ProductCode、ProductName、Manufacturer、ProductLanguage和ProductVersion,其分别对应了<Product>元素的五个属性upgradeCode、Name、Manufacturer、Language和version。

定义目录结构

目录通过<Directory>元素来定义,其描述了我们要安装在目标计算机上的文件夹结构。案例HelloWorld中定义目录结构的语句如下:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="HelloWorld">
            …
        </Directory>
    </Directory>
</Directory>

Id为TARGETDIR的<Directory>元素是Windows Installer要求必须有的,并且其是我们安装目录结构的根目录。而Id为ProgramFilesFolder的<Directory>元素指定了目标计算机上的Program Files文件夹,ProgramFilesFolder是Windows Installer预定义的一个属性,通常其属性值为C:\Program Files\。第三个<Directory>元素则指定了我们安装的软件在Program Files文件夹下的子文件夹,这里该子文件夹命名为HelloWorld,而Id指定为INSTALLFOLDER,该标识符Id可以在.wxs文件中任意地方进行引用,另外该Id采用全大写字母,是为了能够在安装的命令行或者用户界面中对该值进行定义,这样也可以改变我们安装的产品在目标计算机上的路径(WiX中Id为全大写形式的属性值可称为全局属性,其值可以在命令行或者用户界面上进行改变)。

于是,我们的HelloWorld将被安装在路径C:\Program Files\HelloWorld\下。

添加文件HelloWorld.exe至安装包

上一篇随笔说过,Component是安装的基本单元,而Component则是由文件,或快捷方式,或注册表键值,或它们的组合来组成的。于是,要将一个文件添加到安装包中,则需要两个元素<Component>和<File>。下面是案例HelloWorld中将文件HelloWorld.exe文件添加到安装包中的语句。

<Component Id="ProductComponent" Guid="B5F0C012-49D6-4C63-AFCA-0CE6C24C6D7D">
    <File Id="HelloWorld" Source="HelloWorld.exe" />
</Component>

<Component>元素在定义在Id为INSTALLFOLDER的<Directory>元素下的,这样我们的HelloWorld.exe文件将被安装在路径C:\Program Files\HelloWorld\下。每一个Component必须有且只有一个关联目录。<Component>元素的Id用于在.wxs文件的任意地方引用该<Component>元素,而Guid元素指定的GUID值则是用于Windows Installer对该Component进行跟踪的,<Component>元素的GUID值必须的全大写,并且是唯一的。

在<Component>元素下,<File>元素将指定我们要安装的HelloWorld.exe文件。属性Id的值HelloWorld用于标识该<File>元素,可在.wxs文件任意地方通过其来引用该<File>文件。而属性Source指定了文件HelloWorld.exe在我们机器上的路径,这样WiX就可以找到它并把它添加的安装包MSI文件中。

另外,<File>元素还有一个KeyPath属性和CheckSum属性。若我们将KeyPath属性设置为Yes,则Windows Installer将会根据这个<File>元素指定的文件来判断该Component是否已被安装。若我们没有设置KeyPath属性,则Windows Installer将会顺序地扫描该<Component>下的子元素,然后自动选择一个子元素作为该Component已被安装的判据。可执行文件头部通常有一个校验和,于是对可执行文件,我们通常将CheckSum属性设置为Yes,这样在我们进行安装修复时,就可以通过该校验和来判断该文件的有效性。

告诉Windows Installer安装文件HelloWorld.exe

要想安装HelloWorld.exe文件,需要将包含该文件的<Component>元素包含进一个<Feature>中。<Feature>将我们的产品划分为一些逻辑上的部件,这样用户可以独立地对它们分别进行安装。下面就是我们的HelloWorld案例中定义的<Feature>元素。

<Feature Id="ProductFeature" Title="HelloWorld" Level="1">
    <ComponentRef Id="ProductComponent" />
</Feature>

在<Feature>元素的子元素中,通过一个<ComponentRef>元素来引用Id为ProductComponent的<Component>元素,也就是说该Feature是由Id为ProductComponent的Component组成的,该Component中包含我们的HelloWorld.exe文件,于是当我们选择安装该Feature时,即安装了我们的HelloWorld.exe文件。<Feature>元素的Title属性设置为HelloWorld,如果我们的安装过程有UI界面并且有Feature选择界面,则在Feature选择界面中将显示该Feature的标题HelloWorld。而<Feature>元素的Level属性设置为1,表明该Feature在默认情况下是有效的、可安装的。

时间: 2024-10-29 19:36:34

Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析的相关文章

Wix学习整理(1)——快速入门HelloWorld

原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Installer安装包数据库的元素.关于Wix的详细介绍,查看Wix Tutorial. 通过http://wix.codeplex.com/,我们下载最新的Wix toolset,并进行安装. 2 1+1=2 动手实践是感受最深的方式.下面我们就通过制作一个简单的HelloWorld安装包来感受一下Wix.

Wix学习整理(5)——安装时填写注册表

原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.详细介绍参考维基百科--注册表. 如何操作注册表? 通过工具Windows操作系统自带工具regedit.exe即可对注册表进行添加.删除.修改等操作. 注册表的五个分支 注册表有五种分支:HKMU.HKCR.HKCU.HKLM和HKU.下面对这五种注册表分支进行简单介绍, HKMU:全称HKE

Wix学习整理(3)——关于Windows Installer和MSI

原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和配置服务,其实现了软件安装的业务逻辑:如何安装软件?如何修改注册表键值?如何创建快捷方式?如何操作网站目录或注册服务?等等.Windows Installer技术由两部分组成:客户端安装程序服务(Msiexec.exe)和Microsoft软件安装包文件(MSI). 关于MSI Windows In

Wix学习整理(6)——安装快捷方式

原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注册信息的基础上为HelloWorld的安装包添加安装快捷方式.下面我们将以安装开始菜单快捷方式为实例详细地阐述一下Wix的关于安装快捷方式的基础知识. 首先,我们要定义好目录结构. 开始菜单快捷方式的安装目录结构与应用软件的实际安装目录结构不一样. <Directory Id="Program

Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些在安装时添加的内容,在卸载时也会自动地删除.但是,到目前为止,我们的卸载只有两种方式:通过原始安装包或控制面板中的卸载或更改程序.现在,我们来学习Wix如何为我们的HelloWorld在安装时在开始菜单中提供卸载的快捷方式. 一 添加卸载快捷方式 添加卸载的快捷方式也是通过<Shortcut>元素

Wix学习整理(2)——HelloWorld安装添加UI

原文:Wix学习整理(2)--HelloWorld安装添加UI 在前一篇随笔Wix学习整理(1)--快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修改Wix源文件来给安装程序添加UI. 1 Wix的预定义UI简介 Wix toolset提供的WixUIExtension.dll包(在目录C:\Program Files\WiX Toolset v3.6\bin下)中提供了五种UI对话框集合,分别是WixUI_Advanced.WixUI_Fea

[WiX]我的第一个WiX安装脚本

我的第一个WiX安装脚本   WiX的Wiki: WiX 代表 Windows Installer Xml (WiX) toolset  它是建立Windows Installer的XML toolset (MSI) 包裹从XML文件.它支持开发商集成他们的发布过程建立MSI 和MSM 设定包裹的命令行环境. 内部结构 Wix 由四份组成: 蜡烛.光.Lit 和黑暗. 蜡烛 蜡烛, 编译器, 叫蜡烛.   光 点燃, 连接器作为一个或更多目标文件和链接参考在目标文件在适当的标志在其它目标文件.光

【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

原文:[Cocos2d-x for WP8 学习整理](1)创建一个新项目 喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2.X 在preview 版本持续了好久,搞的我一直以为微软已经放弃这么个强大的引擎了,只去支持Unity了,结果很意外的在 2.2的更 新版本,这一次,终业余兵终于转职业了,作为一直以来都被边缘化的WP开发者,我表示十分特别

【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜

原文:[Cocos2d-x for WP8 学习整理](4)CCTableView 实现<天天爱消除>中的得分榜 接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8的 Listbox 效果一样,实现 大数据的虚拟化展示, 不管在应用还是游戏里都是很常见的控件. 比如下面的 <天天爱消除> 的分数展示   下面我们用 CCTableVi