原文: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在默认情况下是有效的、可安装的。

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

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

    原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...

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

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

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

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

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

    原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...

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

    原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和 ...

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

    原文:Wix学习整理(2)--HelloWorld安装添加UI 在前一篇随笔Wix学习整理(1)——快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修 ...

  7. Wix使用整理(一)

    由于工作需要,学习了一段时间Wix,总算小有起色.鉴于国内Wix  的普及和使用有限,这里将个人遇到得问题和解决方案记录下来,以便交流和相互促进. Wix :全称 Windows Installer ...

  8. WIX 学习笔记- 1 简介

    一个项目 Code Complete 后,程序员们欢欣鼓舞,以为事情到此结束,可以 Happy 了.其实 Code Complete 五十之于百里.一个没有运行在设备上,为人们创造价值的项目是注定失败 ...

  9. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

随机推荐

  1. C#、WinForm、ASP.NET - Md5散列加密

     MD5值概念解释: 转载自:http://free0007.iteye.com/blog/2047163 所 谓MD5,即"Message-Digest Algorithm 5(信息-摘要 ...

  2. C语言,realloc

    void * realloc ( void * ptr, size_t new_size ); 关于realloc的行为方式,结合源码总结为:1. realloc失败的时候,返回NULL: 2. re ...

  3. Eclipse用法和技巧二:自动生成Main方法1

    刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...

  4. iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)

    链接地址:http://www.it165.net/pro/html/201408/18884.html 1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社 ...

  5. baas & API 网关

    最近一段时间一直在做API 网关的工作.清晰看到当前云下Baas将会是主要方向,而API网关会是一把利剑. 本人正在规划API网关,有兴趣的可以一起探讨:hotwheels_bo@163.com

  6. 14.10.2 File Space Management 文件空间管理:

    14.10.2 File Space Management 文件空间管理: 数据文件 你定义在配置文件形成了InnoDB的系统表空间, 文件是逻辑连接形成表空间,没有条带化使用. 你不能定义你的表在表 ...

  7. Custom draw 和 Owner draw 的区别

    "Custom Draw" is a feature shared by all of Microsoft's common controls, which allows you ...

  8. find-a-jar-file-given-the-class-name

    Save this as findclass.sh (or whatever), put it on your path and make it executable: #!/bin/sh find ...

  9. 14.1.1 InnoDB as the Default MySQL Storage Engine

    14.1 Introduction to InnoDB 14.1.1 InnoDB as the Default MySQL Storage Engine 14.1.2 Checking InnoDB ...

  10. 基于visual Studio2013解决面试题之0303数组求和

     题目