上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对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打包系列(二)用户界面和本地化操作的更多相关文章
-
Wix打包系列(一)如何使用wix制作安装程序
原文:Wix打包系列(一)如何使用wix制作安装程序 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费 ...
-
Wix打包系列(五) 部署数据库
原文:Wix打包系列(五) 部署数据库 很多人在使用vs进行打包的时候,经常会为数据库部署的问题犯愁,即便是重写Installer类的方法,也不是很可靠方便,下面我们来看看在wix中如何部署数据库. ...
-
Wix打包系列(四) 自定义UI
原文:Wix打包系列(四) 自定义UI 除了标准的安装界面,如果我们要在安装时需要提供一些额外的信息时,这时就需要自定义界面来显示和录入这些信息. 4.1 自定义对话框 如上一章中我们测试数据库的连 ...
-
Wix打包系列 (六)制作升级和补丁包
原文:Wix打包系列 (六)制作升级和补丁包 前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我 ...
-
Wix打包系列(三)自定义Action(Custom Action)
原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...
-
Wix打包系列(七) 添加系统必备组件的安装程序
原文:Wix打包系列(七) 添加系统必备组件的安装程序 我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件.这里以.Net Fr ...
-
MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
-
DocX开源WORD操作组件的学习系列二
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
-
windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
随机推荐
-
2-3 Linux文件管理命令详解
1. 复制文件 cp: copy 格式 SRCFILE DEST 一个文件到一个文件 多个文件到一个目录 注,cd 后面什么都不加,是进入用户的家目录 如果目标文件不存在,则先创建文 ...
-
(8) 深入理解Java Class文件格式(七)
转载:http://blog.csdn.net/zhangjg_blog/article/details/22091529 本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本 ...
-
在Git中一定要关注的crlf自动转换
GitHub 第一坑:换行符自动转换 如果你已经做出了错误的选择,也不需要重新安装,可以直接使用命令行来修改设置.很简单,直接打开这货自带的命令行工具 Git Bash,输入以下命令,再敲回车即可: ...
-
Oracle笔记(1) 简单查询、限定查询、数据的排序
Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...
-
Windows 系统下安装 dig 命令
dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...
-
关于ArrayList的5道面试题
我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...
-
php emoji mysql保存和搜索
MySQL版本>=5.5.3 表字符集: utf8mb4 解决保存 排序规格: utf8mb4_bin 解决搜索 PHP: set names utf8mb4 操作系统: WIN10 MAC
-
关于Dos命令中存在中文的解决方法
问题:当我们直接打开dos窗口并在里面写入中文时是没有问题的,但是当我们把这些命令放在bat文件中执行时就出问题了解决:1.首先可以通过pause命令来查看错误原因2.记事本默认是UTF-8格式的,而 ...
-
Segments(叉积)
Segments http://poj.org/problem?id=3304 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
-
C++ 课堂作业1.0
c++第一次课堂作业点这里 题目要求:输入半径,计算圆的面积,在调用外部函数,无需使用类.