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下 ...
随机推荐
- Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景
工厂方法一般写法 StartLayer * StartLayer::create() { StartLayer *sl = new StartLayer(); sl->init(); sl-&g ...
- 浅析嵌入式Linux系统的构成和启动过程
在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的一些特点,本文就嵌入式Linux系统的构成和启动过程做一些总结. 一.嵌入式Linux系统构 ...
- C# LDAP认证登录
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X ...
- .NET - 代码重构技巧
通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由 ...
- MFC自绘控件学习总结第二贴
首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...
- HTTPClient和URLConnection核心区别分析
首先:在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection.但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活. 在An ...
- HDU 4668 Finding string (解析字符串 + KMP)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串 ...
- Android学习笔记(十三)——碎片(一)
碎片 碎片可看作第二种形式的活动,能够创建碎片来包括视图. 碎片总是嵌入在活动中,一般有两种常见形式: 1.碎片A和碎片B分别处于不同的活动中,当选择碎片A中的某一项时,触发碎片B启动: 2.碎片A和 ...
- 在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...
- 用VC实现竖写汉字的方法
中国人自古就有自右至左.从上到下书写汉字的习惯.而当我们在自己所编写的应用程序中使用输出函数输出的总是自左至右的横排文字.有没有可能在我们的应用程序中实现竖写汉字的效果呢?笔者偶然发现了一种利用VC实 ...