在前一篇随笔Wix学习整理(1)——快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程。下面我们修改Wix源文件来给安装程序添加UI。

1 Wix的预定义UI简介

Wix toolset提供的WixUIExtension.dll包(在目录C:\Program Files\WiX Toolset v3.6\bin下)中提供了五种UI对话框集合,分别是WixUI_Advanced、WixUI_FeatureTree、WixUI_InstallDir、WixUI_Minimal和WixUI_Mondo。下面分别对这五种预定义UI对话框集合进行简单的说明。

WixUI_Advanced对话框集合

WixUI_Advanced提供了与WixUI_Minimal类似的一键安装形式。不过其在协议界面提供了配置高级选项的按钮。在高级选项中,我们可以选择该产品是安装给当前用户还是给所有用户的,在Wix文件中需要一个Id为“WixAppFolder”的属性(Property),指定默认选择当前用户(WixPerUserFolder)还是所有用户(WixPerMachineFolder)。另外,需要一个Id为“ApplicationFolderName”的属性来指定产品所安装在的默认文件夹。

<PropertyId=”ApplicationFolderName”Value=”HelloWorld”/>
<PropertyId=”WixAppFolder”Value=”WixPerUserFolder”/>
<UIRefId=”WixUI_Advanced”/>

WixUI_FeatureTree对话框集合

WixUI_FeatureTree与WixUI_Mondo的区别是WixUI_FeatureTree省略了安装类型对话框。协议同意对话框之后就直接到部件(Feature)选择对话框了。当我们的产品默认是安装所有部件时,更推荐采用WixUI_Feature而不是WixUI_Mondo。其用法是:

<UIRefId=”WixUI_FeatureTree”/>

WixUI_InstallDir对话框集合

WixUI_InstallDir不支持用户选择安装的部件,但是其增加了让用户选择安装目录的对话框。在Wix文件中需要一个Id为“WIXUI_INSTALLDIR”的属性来产品要安装的目录的ID(ID必须是全部大写,大写的目的是为了能够让用户在对话框中选择的自定义目录能够回写到相对应ID的Directory元素)。其在下面的用例中的用法是:

<PropertyId=”WIXUI_INSTALLDIR”Value=”INSTALLFOLDER”/>
<UIRefId=”WixUI_InstallDir”/>

WixUI_Minimal对话框集合

WixUI_Minimal是最小的预定义对话框集合,其将Welcome对话框和协议同意对话框结合,选择协议后就直接安装了。这种对话框集合适用于我们的产品没有自定义部件以及不支持变更安装目录的情况。其用法是:

<UIRefId=”WixUI_Minimal”/>

WixUI_Mondo对话框集合

WixUI_Mondo提供了Welcome、协议同意、安装类型选择、部件选择等自定义安装的对话框,但其不支持安装目录的变更。当我们的产品默认情况下不安装全部部件时,这样典型安装(typical)和完全安装(complete)之间就有个明显的区别,此时推荐使用WixUI_Mondo。其用法是:

<UIRefId=”WixUI_Mondo”/>

下面我们的用例就设置WixUI_Mondo对话框集合。

2 制作带UI界面的HelloWorld.msi

修改Product.wxs文件,内容如下

1 <?xml version="1.0" encoding="UTF-8"?>
2 <Wixxmlns="http://schemas.microsoft.com/wix/2006/wi">
3          <ProductId="*"Name="HelloMSI"Language="1033"Version="1.0.0.0"Manufacturer="LEH"UpgradeCode="1de12ee7-2e94-42ac-979f-06245a0ade30">
4                    <PackageInstallerVersion="200"Compressed="yes"InstallScope="perMachine" />
5                    <MediaId="1"Cabinet="media1.cab"EmbedCab="yes" />
6
7                    <DirectoryId="TARGETDIR"Name="SourceDir">
8                             <DirectoryId="ProgramFilesFolder">
9                                      <DirectoryId="INSTALLFOLDER"Name="HelloWorld">
10                                                <ComponentId="ProductComponent"Guid="B5F0C012-49D6-4C63-AFCA-0CE6C24C6D7D">
11                                                         <FileId="HelloWorld"Source="HelloWorld.exe" />
12                                                </Component>
13                                      </Directory>
14                             </Directory>
15                    </Directory>
16
17                    <FeatureId="ProductFeature"Title="HelloWorld"Level="1">
18                             <ComponentRefId="ProductComponent" />
19                    </Feature>
20
21                    <UIRef Id="WixUI_Mondo" />
22          </Product>
23 </Wix>

相对比之前的Product.wxs文件,这个文件只是添加了上面标红的<UIRef Id=”WixUI_Mondo” />一行语句而已。若想使用其他的预定义对话框集合,只需将红色语句变更为相应对话框集合的用法语句即可。

下面开始编译和链接该文件以生成.msi文件。编译命令还是不变,

candle Product.wxs

链接的命令为

light Product.wixobj –out HelloWorld.msi –ext "C:\Program Files\WiX Toolset v3.6\bin\WixUIExtension.dll"

其中-ext选项指定了特定的扩展包WixUIExtension.dll,其运行结果如下,

编译和链接后,在文件Product.wxs所在目录即生成了HelloWorld.msi文件。

3 验收我们的成果

双击HelloWorld.msi文件,可以看到如下安装的交互界面,

选择Typical,然后Next,

完工!现在HelloWorld.exe文件已成功安装在目录C:\Program Files\HelloWorld下。

转载于:https://www.cnblogs.com/lienhua34/archive/2012/10/08/2714654.html

Wix学习整理(2)——HelloWorld安装添加UI相关推荐

  1. Wix学习整理(6)——安装快捷方式

    一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注册信息的基础上为HelloWorld的安装包 ...

  2. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

    通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些在安装时添加的内容,在卸载时也会自动地删除.但是,到目前为止,我们的卸载只有两种方 ...

  3. Vue-Cli 学习整理【转载】

    Vue-Cli 学习整理 坚果 程序猿/艺术 ​关注他 21 人赞同了该文章 1. vue-cli(vue脚手架)全集 1.1. vue-cli2脚手架 1.1.1. nodejs/npm环境安装 1 ...

  4. docker学习整理

    Docker学习整理 概述 Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器 ...

  5. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  6. MiniGUI学习整理

    Ministudio开发miniGUI指南 --目录-- 1.概念 2.搭建Windows下Ministudio开发环境 3.Ministudio使用指导 4.ubuntu12.4上安装minigui ...

  7. 【FastDDS学习笔记】HelloWorld示例程序编译和运行

    目录 第一章:[FastDDS学习笔记]Ubuntu22上安装fastDDS环境 第二章:[FastDDS学习笔记]HelloWorld示例程序编译和运行 第三章:[FastDDS学习笔记]Fast- ...

  8. 【Gazebo入门教程】第一讲 Gazebo的安装、UI界面、SDF文件介绍

    [Gazebo入门教程]第一讲 Gazebo的安装.UI界面.SDF文件介绍 文章目录 [Gazebo入门教程]第一讲 Gazebo的安装.UI界面.SDF文件介绍 一.Gazebo的简介与安装 1. ...

  9. 【ROS】中级操作学习整理-激光SLAM

    系列文章目录 ·[ROS]中级操作学习整理-gazebo机器人仿真 ·[ROS]中级操作学习整理-TF坐标变换 ·[ROS]中级操作学习整理-传感器建模 ·[ROS]中级操作学习整理-激光SLAM 文 ...

最新文章

  1. 扒一扒 JVM 的垃圾回收机制,拿大厂offer少不了它!
  2. 3 x 10的python表达式_已知 x = [3, 5, 7],那么表达式 x[10:]的值为_学小易找答案
  3. Spring Cloud构建微服务架构:服务消费(基础)【Dalston版】
  4. 社区奖品之金士顿1G U盘
  5. 硬件工程师成长之路(10.1)——芯片选型
  6. Flash之swf文件的加密与破解
  7. 国基北盛—云计算容器云pass(2.4)平台搭建
  8. android虚拟机运行app出现错误Unfortunately
  9. C语言打印心形,爱心打印
  10. 基于matlab的天线方向图,基于matlab的天线方向图
  11. 618投影仪怎么选?看看极米NEW Z6X、极米Z6X Pro与极米H3S
  12. mysql语句distinct_MySQL DISTINCT语句
  13. Qt扫盲-QList使用总结
  14. 微信摇一摇插件ios_苹果ios微信摇一摇代码实现
  15. 神经元模型 Izhikevich Model
  16. ExoPlayer漫谈之解码器复用
  17. 与众不同的区块链投资第一课
  18. 人性的弱点 --卡耐基
  19. [python自动化]selenium实现超星某某通自动评论
  20. 论文阅读——Towards Adversarial Retinal Image Synthesis

热门文章

  1. 【python】 字符串转小写(含汉字等时仍work)
  2. Dave Python 练习十五 -- 面向对象编程
  3. 面向对象编程(Object Oriented Programming)概念总结及延伸(一)
  4. Video4Linux
  5. Android应用开发相关下载资源
  6. linux中断处理函数参数,第9章 设置ISR(中断处理函数)
  7. cnn 一维时序数据_一时序数据输入维cnn
  8. python实现高校教务管理系统_基于Python技术的教务管理系统的研究与开发
  9. 阿里云函数计算 FC再次荣获最受观众喜爱奖
  10. 基于动态背包的多场景广告序列投放算法