Wix打包系列(二)用户界面和本地化操作

时间:2021-02-22 22:55:05

原文:Wix打包系列(二)用户界面和本地化操作

上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对Sample.wxs的编译链接,生成的msi安装包没有任何用户界面,只有一个安装进度条。下面我们来看看如何给安装包添加用户界面:

    2.1   使用wix用户界面

wix本身自带有一套UI,使用这些UI我们可以满足大多数的安装界面要求,你可以决定到底使用哪种WixUI:

1、WixUI_Mondo 包含WixUI附带的全部用户界面:welcome界面,许可协议,安装类型(经典、自定义、完全),部件定制(安装类型自定义),浏览目标目录,磁盘消耗,同时也包含维护模式的界面;

    2、WixUI_FeatureTree 与WixUI_Mondo的区别就是不能选择安装类型,许可协议界面之后直接到了部件定制界面;

    3、WixUI_InstallDir 不会出现选择安装类型和自定义部件的界面,许可协议之后会进入到选择安装目录界面

4、WixUI_Minimal 简化的安装界面,在欢迎和许可协议后会自动安装,不能自定义部件和安装路径

5、WixUI_Advanced  跟WixUI_Minimal 相似,可以一键直接安装,也允许定义部件和安装路径

要在安装程序中应用WixUI需要进行如下配置,首先在源文件Sample.wxs中添加UI的引用,UIRef标记可以放到Product或Fragment标签下:

<UIRef Id="WixUI_Mondo" />
<UIRef Id="WixUI_ErrorProgressText" />

WixUI_Mondo 是用户界面的引用,WixUI_ErrorProgressText则是安装进度文本,加上该语句后,在安装进度界面会显示安装进度的文字信息。另外还有一个FilesInUse对话框也很有用,如果安装过程中要修改的文件正在使用,则会挂起安装程序,并弹出文件正在使用的对话框,用户可以选择重试、忽略或者退出安装,使用FilesInUse对话框只需添加如下语句:

<DialogRef Id = "FilesInUse" />

需要注意的是如果使用WixUI_InstallDir 界面,则还必须额外定义一个标识为WIXUI_INSTALLDIR的Property。它的Value为安装目录的Directory的ID,这个ID必须是大写的

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />

所有的WixUI的资源文件都包含在wix目录下的WixUIExtension.dll中,因此在链接的时候需要加上-ext WixUIExtension参数:

candle.exe -dVersion=1.0.0  Sample.wxs -out 1.0.0/
light.exe -ext WixUIExtension -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj

2.2   部件(Feature )定制

执行生成的Sample.msi,我们就可以看到现在安装包中已经包含用户界面了,我们可以看看部件定制界面,也就是选择自定义安装时出现的界面,包括2个可选的子部件和一个父部件,这3个部件正是我们之前定义的Feature,我们来看看之前我们定义的Feature的属性:

    Title属性是部件树中显示的部件名称;

    Description 属性是点击部件节点时在右边文本框中显示的描述性文字。

    ConfigurableDirectory属性很重要,它的值是我们之前定义的目录的引用INSTALLDIR,如果不设置该属性,将不能为部件选择安装路径;

    Level是安装部件的条件等级,要理解它的含义,我们还必须知道Install level的概念:

    Install level可以理解成是安装级别的level,而Feature level 则是部件级别的level。Install level的值对应于安装类型,在选择安装类型时,会对Install level赋值。对于典型安装(Typical)的Install level是3,选择典型安装的情况下Feature level小于等于3的Feature都将被安装;对于完全安装(Complete)的Install level是1000,选择完全安装的情况下Feature level小于等于1000的Feature都将被安装,因此一般情况下我们定义的level不要超过1000;Feature level 设置为0部件将不会被安装,也不会在部件定制时显示出来。

另外要注意的是Feature,如果我们我们在Feature下定义了Condition,则Condition的条件为true时的level值将覆盖Feature的Level值。Condition,顾名思义就是条件,wix中Condition有多种用法:可以定义在Component下,作为安装Component的条件;定义在Control下,作为ControlCondition的入口;定义在Fragment 或者 Product下,作为运行安装程序的入口;定义在Feature下,则作为Feature 条件的入口,如定义如下condition,则当TESTSUCCESS属性为1时,Feature level的属性将被重置为1000。

<Condition Level='1000'>TESTSUCCESS = "1"</Condition>

2.3  本地化配置

到这里我们有了安装界面,但大家会发现安装界面的文字都是英文的,下面我们来看如何对安装包进行本地化的操作。首先我们要准备一个你需要语言的资源文件,可以到http://www.tramontana.co.hu/wix/loc/index.php下载相关的资源文件;不过很可惜,这里只有繁体的资源文件WixUI_zh-tw.wxl,并没有我们想要的简体中文的资源文件,我们可以将WixUI_zh-tw.wxl下载到本地,然后将繁体翻译成简体;也可以点这里下载(里面包含wixUI和SqlExtension的中文资源文件)。

接着我们需要对源文件进行如下改动:

1、修改源文件编码格式为utf-8:

<?xml version="1.0" encoding="utf-8"?>

2、修改Product的Codepage和Language属性,对应中文的属性值是Codepage="936" Language="2052"。

3、修改Package对应  的属性Languages和SummaryCodepage为936和2052

然后编译源文件,最后在链接时需要使用-loc开关加载资源文件,如下:

candle.exe -dVersion=1.0.0  Sample.wxs -out 1.0.0/
light.exe -loc WixUI_zh-cn.wxl  -ext WixUIExtension -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj

2.4  自定义界面元素

运行生成的安装文件,已经变成中文安装界面了。到这里我们发现,许可协议内容和界面风格都还是wix默认的,wix中这些界面元素的内容都是使用变量定义的,我们可以通过重定义变量的值来更改这些界面元素:

<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
<WixVariable Id="WixUIBannerBmp" Value="banner.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="dialog.bmp" />
<WixVariable Id="WixUIExclamationIco" Value="exclamation.ico" />
<WixVariable Id="WixUIInfoIco" Value="information.ico" />
<WixVariable Id="WixUINewIco" Value="new.ico" />
<WixVariable Id="WixUIUpIco" Value="up.ico" />

这里的Value 值是目标文件的相对路径,在与wxs源文件相同的目录下,ID的值是目标文件的标识,不能改变。

到这里我们已经可以生成一个标准的安装界面了,后面我们还将看到如何生成自定义的安装界面,下一章我们将讨论如何自定义Action(Custom Action)

Wix打包系列(二)用户界面和本地化操作的更多相关文章

  1. Wix打包系列(一)如何使用wix制作安装程序

    原文:Wix打包系列(一)如何使用wix制作安装程序 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费 ...

  2. Wix打包系列(五) 部署数据库

    原文:Wix打包系列(五) 部署数据库 很多人在使用vs进行打包的时候,经常会为数据库部署的问题犯愁,即便是重写Installer类的方法,也不是很可靠方便,下面我们来看看在wix中如何部署数据库. ...

  3. Wix打包系列(四) 自定义UI

    原文:Wix打包系列(四) 自定义UI 除了标准的安装界面,如果我们要在安装时需要提供一些额外的信息时,这时就需要自定义界面来显示和录入这些信息. 4.1  自定义对话框 如上一章中我们测试数据库的连 ...

  4. Wix打包系列 (六)制作升级和补丁包

    原文:Wix打包系列 (六)制作升级和补丁包 前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我 ...

  5. Wix打包系列(三)自定义Action&lpar;Custom Action&rpar;

    原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...

  6. Wix打包系列(七) 添加系统必备组件的安装程序

    原文:Wix打包系列(七) 添加系统必备组件的安装程序 我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件.这里以.Net Fr ...

  7. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  8. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  9. windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

随机推荐

  1. 2-3 Linux文件管理命令详解

    1. 复制文件 cp: copy 格式  SRCFILE         DEST 一个文件到一个文件 多个文件到一个目录 注,cd 后面什么都不加,是进入用户的家目录 如果目标文件不存在,则先创建文 ...

  2. &lpar;8&rpar; 深入理解Java Class文件格式&lpar;七&rpar;

    转载:http://blog.csdn.net/zhangjg_blog/article/details/22091529 本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本 ...

  3. 在Git中一定要关注的crlf自动转换

    GitHub 第一坑:换行符自动转换 如果你已经做出了错误的选择,也不需要重新安装,可以直接使用命令行来修改设置.很简单,直接打开这货自带的命令行工具 Git Bash,输入以下命令,再敲回车即可: ...

  4. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  5. Windows 系统下安装 dig 命令

    dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...

  6. 关于ArrayList的5道面试题

    我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...

  7. php emoji mysql保存和搜索

    MySQL版本>=5.5.3 表字符集: utf8mb4 解决保存 排序规格: utf8mb4_bin 解决搜索 PHP:  set names utf8mb4 操作系统: WIN10 MAC

  8. 关于Dos命令中存在中文的解决方法

    问题:当我们直接打开dos窗口并在里面写入中文时是没有问题的,但是当我们把这些命令放在bat文件中执行时就出问题了解决:1.首先可以通过pause命令来查看错误原因2.记事本默认是UTF-8格式的,而 ...

  9. Segments&lpar;叉积&rpar;

    Segments http://poj.org/problem?id=3304 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: ...

  10. C&plus;&plus; 课堂作业1&period;0

    c++第一次课堂作业点这里 题目要求:输入半径,计算圆的面积,在调用外部函数,无需使用类.