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打包系列(二)用户界面和本地化操作的更多相关文章
- 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下 ...
随机推荐
- Delphi中运行时改变panel的位置及大小(通过wm_SysCommand来实现)
procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Int ...
- javascript 如何获取return回来的对象值
function aa(){ var b = 1; var c = b+2; return{ a1:b, a2:c } } var bb=aa(); alert(bb.a1);
- ArcGIS制图——多图层道路压盖处理
[1] 启动ArcMap,载入各道路要素类.生成名为All-Roads的图层组,如他所看到的,符号级别绘制将对图层组内图层符号起作用: 图层组设置符号等级 [2] 在内容列表中,右 ...
- deflate——过时的网页压缩格式,最好禁用[转]
在设置GZip时,发现同时有个Deflate压缩设置,一开始并不了解Deflate压缩,于是便在启用GZip的同时,也启用了Deflate压缩.虽然同时设置GZip和Deflate压缩,并不影响网站的 ...
- Linux IP代理筛选系统(shell+proxy)
代理的用途 其实,除了抓取国外网页需要用到IP代理外,还有很多场景会用到代理: 通过代理访问一些国外网站,绕过被某国防火墙过滤掉的网站 使用教育网的代理服务器,可以访问到大学或科研院所的内部网站资源 ...
- iPhone App开发实战手册学习笔记(9)之设计IOS App的目标
1 前言 如果我们要做一个属于自己的App需要达到那些目标呢,今天就来介绍一下. 2 详述 2.1 关注用户及其需求 你的主要目标永远都是在设计方案之前先想好用户用例.有些开发人员喜欢编写用户故事来确 ...
- Python 生成的页面中文乱码问题
第一 保证 程序源文件里的中文的编码格式,如我们把 源文件的编码设置成utf8的. reload(sys) sys.setdefaultencoding('utf-8') 第二, 告诉浏览器,我们须要 ...
- U3D——Unity3D的脚本-script入门
Unity3D的基本操作非常easy就能掌握了,接下来就是游戏系统的核心部分:脚本. 什么是Script(脚本)?简而言之,就是使用代码来运行一系列动作命令的特殊文本,它须要编译器来从新解读.U ...
- 【Python】Python 基础知识
数字和表达式 >>> 2+3 5 >>> 1.0/2.0 0.5 >>> 1.0//2.0 # // 0.0 >>> 1%2 # ...
- !!!!!安卓界面总是显示载入进度条的问题,没事别乱用ListFragment
近期的安卓应用快完工了.可是个别界面有瑕疵,怎么改动都解决不了.挥之不去的阴影.问题例如以下: 在界面上,数据已经载入完成了.可还是有一股圆形的进度条,感觉它老是在载入什么东西,严重影响界面美观: 1 ...