[译]:WiX Toolset入门——利用Visual Studio处理WiX

标签: WiX Toolset, 官方教程, 中文翻译

博客分类: 官方教程

返回目录索引
本文内容为官方文档多部分整合:
原文链接:

利用Visual Studio操作WiX项目

Visual Studio的WiX插件可以让我们更方便的创建WiX项目,利用其智能感知编辑WiX文件,并直接通过IDE环境编译链接项目。

WiX项目模板

WiX提供以下几个Visual Studio项目模板:

  • WiX Project —— Setup Project :用于创建一个新的Windows安装包文件(.msi)。每一个WiX Project项目都包含一个 .wxs 文件 —— 内容包括一个<Product>元素,以及创建完整Windows安装包所需的基本架构内容。<Product>元素下包含以下元素:<Package>, <Media>, Directory, Component, <Feature>
  • WiX Library Project —— Setup Library Project :用于创建一个新的WiX类库文件(.wixlib)。一个 .wixlib 安装功能类库可以很方便的在创建不同的WiX安装包时进行共享使用。每一个WiX类库项目中均含有一个 .wxs 文件 —— 内容包括一个<Fragment>元素,其中<Fragment>元素内容为空,内容由自己填写,以此实现多安装包共享项目。
  • WiX Merge Module Project —— Merge Module Project :用于创建一个用于合并模块的Windows安装程序(.msm)。合并模块一系列的Windows安装程序资源 —— 用于在将模块内容合并到 .msi 包时,可以在多个Windows应用程序之间共享。每一个WiX合并模块项目都包含一个 .wxs 文件 —— 内容包括一个<Module>元素,以及创建完整Windows合并模块包所需的基本架构内容。<Module>元素包含以下元素:<Package>, <Directory>, <Component>
  • Bootstrapper Project —— 新增类型 —— 用于创建 .exe 类型的安装程序。

新增项目步骤:

  1. 点击Visual Studio菜单: 文件-新建-项目
  2. 找到 模板-Windows Installer XML 节点
  3. 选择需要的模板,点击 确定

WiX文件项模板

WiX提供以下几个Visual Studio文件项模板:

  • WiX File —— 一个 .wxs 文件,默认内容与项目WiX Project中 .wxs 文件预置内容一样。
  • WiX Include File —— .wxi 类型空文件
  • WiX Localization File —— .wxl 类型空文件
  • Text File —— .txt 类型空文件

关于更多WiX文件类型内容,见:原文:File List

新增项步骤:

  1. 在解决方案管理器中,右击项目节点
  2. 选择 添加-新建项 ,然后选择需要的项模板
  3. 输入项名称,点击 添加

WiX项目属性页

在Visual Studio解决方案管理中右击WiX项目,选择属性打开WiX属性页面。WiX项目包含以下几个属性页面:

  • Installer
  • Build
  • Build Events
  • Paths
  • Tool Settings

Installer属性页

Installer标签包含以下配置项:

  • Output name —— 生成操作时创建的文件名称
  • Output type —— 输入文件类型下拉框,包含类型:msi包,Merge模块,WiX类库或者引导程序。

Build属性页

Build标签包含以下配置项:

  • General部分:定义常量配置和生成语言。关于更多信息见:原文:Specifying cultures to build
  • Messages部分:配置警告级别,以及将警告作为错误输出配置和详细输出配置。
  • Output部分:用于设置输出路径,是否删除临时文件,是否输出wixpdb文件以及如果是WiX类库项目,是否将文件绑定到类库文件。

Build Event属性页

Build Event标签包含以下配置项:

  • Pre-build event command line —— 配置生成当前项目前的前置操作
  • Post-build event command line —— 配置生成当前项目后的后续操作
  • Run the post-build event —— 配置什么情况下需要进行后续操作的下拉框

Build Event标签还包含Edit Pre-buildEdit Post-build两个按钮,用于弹出对话框编辑操作命令。编辑对话框中含有所有WiX项目中有效的引用变量,以及当前项目设置中的值列表。

Paths属性页

Paths标签包含以下配置项:

  • Reference Paths部分:用于定义引用(WiX扩展和WiX类库)位置
  • Include Paths部分:定义要包含的文件的位置

Tool Settings属性页

Tool Settings标签页包含以下配置项:

  • ICE validation部分:配置是否可用ICE验证,或者配置哪些情况不需要ICE验证
  • Additional parameters部分:配置WiX工具生成的命令参数

关于什么是ICE,参见:英文:Internal Consistency Evaluators - ICEs
此内容属于较高级内容,有兴趣的去研究 —— 个人暂时还不是很了解

WiX默认项目模板内容介绍

当创建完一个WiX项目时,它会为项目创建一个含有基本设置代码的文件。所有需要创建msi包的文件都可以往里面添加。

注:如果你对Windows Installer安装包不是很熟悉,强烈建议你在继续之前去看下MSDN文档中关于安装包的内容(Installation Package内容)。它会在我们深入了解Windows Installer安装包的详细信息时提供很多有价值的内容。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="MySetup" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="$guid3$">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="MySetup" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="MySetup" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- <Component Id="ProductComponent"> -->
                <!-- TODO: Insert files, registry keys, and other resources here. -->
            <!-- </Component> -->
        </ComponentGroup>
    </Fragment>
</Wix>

如果你对Windows Installer熟悉,那么.wxs文件的结构也会比较熟悉。 首先,Wix元素完全将其他内容包含在内(即Wix是根节点)。Wix元素还指定了命名空间,xmlns属性让编译时可以进行验证,同时在Visual Studio中可以使用自动补全功能。然后,Product元素提供用于标识产品所必需的Windows Installer属性,例如:ProductCode, ProductName, ProductLanguage, 和 ProductVersion。接下来,Package元素包含关于安装包本身的属性(摘要信息)。在其他的元素中,除了ComponentRef元素,都可以使用相同名称在Windows Installer表中找到相关内容,例如:Directory table, Component table, 和 Feature table。Component元素是绑定到Feature元素下的,具体内容见:FeatureComponents table

注:以上内容链接大部分指向微软旧的文档,先微软文档结构调整,建议访问内容地址:Windows Installer
另,微软文档仅作参考,用于加深理解,个人不建议完全研究 —— 真正研究完了,你就可以自己开发个打包工具了

使用默认模板创建的WiX项目在生成时会有生成警告。在输出框中可能看到:

The cabinet 'MySetup.cab' does not contain any files. If this installation contains no files, this warning can likely be safely ignored. Otherwise, please add files to the cabinet or remove it.

即,上述提示是因为缺少文件出现,将文件添加到安装包后,上述警告就会消失。

注:个人遇到,默认情况生成遇到如下错误提示:
The Product/@Manufacturer attribute's value cannot be an empty string. If a value is not required, simply remove the entire attribute.
即,未设置Manufacturer的值,自行添加内容即可。

关于更多实际操作内容

另外,你也可以使用命令行(WiX工具集或MSBuild)管理WiX。


译:奇葩史

没有评论