Wix 安装部署(二)自定义安装界面和行为

这篇会在上篇的基础上继续探索Wix的自定义界面和行为的功能,以下都是个人的小结,不当之处欢迎指正,与君共勉!

一、安装向导

Wix提供了五种安装向导风格,

  • WixUI Advanced
  • WixUI FeatureTree
  • WixUI InstallDir
  • WixUI Minimal
  • WixUI Mondo

如何使用呢?需要两步,先不问为什么:

1.需要使用UIRef 元素  ,在Product中引入

  <UI> <UIRef Id="WixUI_Minimal" /></UI>

2.再在安装工程上右键添加引用,引入WixUIExtension.dll ,这个dll就在你安装的wix的bin目录下面。我们再生成以下,这个时候点击安装文件,安装向导页面就出现了,先是同意许可证,再是上一步,下一步等按钮知道完成,比上一篇中的安装明显像样了些。先不着急往下走,再回头看以下

UI元素是专门用来规范安装UI的,在其中可以定义你选择的风格,设置自定义的行为等。UIRef 用来选择安装向导风格,把Id中Minmal换掉就可以了,Minmal是最简洁的。当然不能出现两个UIRef,不然WIx就凌乱了。

Advance和InstallDir 还需要其他的设置。

InstallDir 需要一个属性,让用户定义安装的地方。如下:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="TESTFILEPRODUCTDIR" Name="Test File">
      ...
    </Directory>
   </Directory>
</Directory>
...
<Property Id="WIXUI_INSTALLDIR" Value="TESTFILEPRODUCTDIR" />
<UIRef Id="WixUI_InstallDir" />

当然要记得修改

<ComponentGroup Id="ProductComponents" Directory="TESTFILEPRODUCTDIR"> 

安装的时候,就会让用户选择安装位置。

WixUIExtension.dll是wix自带的链接库,还有其他的链接库如WixUtilExtension,WixNetFxExtension,WixIISExtension等,会在后面一一探索。

二、自定义风格

这里主要讲的是加入自己的文字和图片,默认的是带有Wix的一些背景图片,正式发布的时候,当然要换成自己产品相关的。

1.修改许可证书。许可证书需要rtf的富文本格式,我们可以用word先把内容写好,然后文件另存为选择rtf格式的保存就行了,再直接粘贴到工程目录下。然后在Product标签中加入以下代码,license.rtf就是你的许可证书。再次生成,安装的时候就在第一页看到了。

    <WixVariable Id="WixUILicenseRtf" Value="license.rtf" />

WixVariable是wix比较先进的个功能,Value不能为空。同样我们可以换掉图片及其他。WixUIDialogBmp的图片会出现在欢迎页和安装完成页,规格是 493 × 312。

WixUIBannerBmp 的图片会出现正上方。规格493 × 58

 <WixVariable Id="WixUIDialogBmp" Value="bb.jpg"/>
 <WixVariable Id="WixUIBannerBmp" Value="top.jpg"/>

还有WixUIInfoIco,WixUINewIco,WixUIUpIco,WixUIExclamationIco 来更换一些图标。

2.定义退出页。

ExitDlg 成功安装后显示,可以加入文字,复选框,让用户选择是否马上执行,我们在安装软件的时候经常看到这个提示。

我们先加入一条感谢语,在Product元素中插入以下内容,WIXUI_EXITDIALOGOPTIONALTEXT 专门用来展示文字。

<Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Thank you for installing this product." />

同理加入一个复选框,用来提示用户运行是否当前程序。

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />

界面让我改成这个样子了,觉得这个背景透明度也是个问题,这个问题先记下。

但这个时候 还是不能运行的,我们再看下一节。

三、执行自定义Action

这里小小的分开下,是因为Action是wix中的一大功能,这次先尝下滋味。需要三步

1.先引入WixUtilExtension.dll

2.用WixShellExecTarget 和 CustomAction来定义这个行为 (在Product元素中加入)

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

WixShellExecTarget 是专门用来运行一个应用程序的,这里的Value中的#号表示的是全路径,而这个myapplication.exe是个id,指向你安装组件的中File的id。相当于这个Property定义了要执行程序的位置。CustomAction定义了这个行为Id就是LanuchApplication,DllEntry表示是入口。深入的认识还是要到后面继续研究。

3.在UI元素中加入Publish元素来告诉UI如何执行这个行为。

  <UI>
    <UIRef Id="WixUI_Minimal" />
    <Publish Dialog="ExitDialog"
    Control="Finish"
    Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
  </UI>

上面两个元素完成了方法的定义,这里的Publish就是触发这个行为。Dialog属性表示是哪个框(dialog),Control=“Finish” 表示是点击完成键触发这个行为,Event=“DoAction” 表示点击后执行这个行为,应该还有其他的值,现在还不知道。而这个Value 正好指向了CustomAction的Id。 WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 表示要checkbox 选中后执行。于是乎,仿佛碎片的世界又联系在了一起。这个时候,我们重新生成后,安装一遍,选择复选框,就能执行了。回头想想,为什么是这样,wix这个相当于全部都是配置文件,不像C#的语言那么优雅,语义化。所以开始看起来确实有些恼火呢。理解了才能记得住,每个元素就相当于一张表,而这个Id对于每个元素来说都是唯一的,这样通过Value和Id彼此关联,而且生产MSI文件其实就是个数据库。

如果要立即执行某个程序,比如bat文件 可以将这个行为加到安装序列中执行

   <CustomAction Id=‘LaunchFile‘ FileKey=‘installdog‘ ExeCommand=‘‘  Return=‘asyncNoWait‘ />
    <InstallExecuteSequence>
      <Custom Action=‘LaunchFile‘ After=‘InstallFinalize‘>1</Custom>
    </InstallExecuteSequence>
    <File Source=‘$(var.Dev)HMIRun\SenseLockDrivers\install.bat‘ Id=‘installdog‘ KeyPath=‘yes‘ />

如果要立即执行某个程序。

<CustomAction Id=‘LaunchDog‘    FileKey=‘install.bat‘ ExeCommand=‘‘  Execute="immediate"  Impersonate="yes"  Return="asyncNoWait" />

<InstallExecuteSequence>
      <Custom Action=‘LaunchDog‘   After=‘InstallFinalize‘   >1</Custom>
    </InstallExecuteSequence>

fliekey指向的是一个bat文件,但奇怪的是,直接运行这个bat瞬间就执行完了,在安装过程中执行却要个10秒钟,推测是因为 After=‘InstallFinalize‘ 等待整个安装完成,但是我修改成其他的InstallExecuteSequence中的行为,却没有触发安装,在卸载的时候却安装了。

还有一种方法,静默的触发bat文件。不会弹出黑色的框。

    <CustomAction Id="service_start_cmd" Property="QtExecCmdLine" Value="&quot;[dirAD8BC174523EABBBEA5FE139FD0C5127]install.bat&quot;"/>
    <CustomAction Id="service_start" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check" />
    <InstallExecuteSequence>
      <Custom Action="service_start_cmd" After="InstallFinalize" Overridable="yes">NOT Installed</Custom>
      <Custom Action="service_start" After="service_start_cmd" Overridable="yes">NOT Installed</Custom>
    </InstallExecuteSequence>

不过windows系统在非管理员下 又会弹出提示:正在安装这个驱动。。。 这个驱动是否正确安装。  虽然比黑框好了一点,但还是不完美。

四、定义文字

所有安装过程中的文字都是可以重载的, 可以通过增加一个String 指定对应的Id 就可以重载,这个可以用来做一个分离工作。需要两步

1.需要加入localization  文件,右键,添加新建项,选择localization File . 再用String 来定义你的文字。

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
    <String Id="ApplicationName">**My Application Name</String>
        <String Id="ManufacturerName">My Manufacturer Name</String>
</WixLocalization>

2.修改你的Product.wxs ,这里的Name 后的表达式就指向localization文件中的Id="Application" 的String。

<Product Id="*" Name="!(loc.ApplicationName)" .......

再次安装的时候文件名就变成了**My Application Name,其他地方同理。这样可以避免多次重复的修改,做到文字和配置的分离。

这一节先到这里,今天眼睛都看花了,自定义的还不止这些,明天继续.....

全部代码:

 

还是那句话,如果对你有帮助,就顶一下吧

时间: 2024-10-14 05:17:14

Wix 安装部署(二)自定义安装界面和行为的相关文章

Apache Hadoop集群离线安装部署(三)——Hbase安装

Apache Hadoop集群离线安装部署(一)--Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apache Hadoop集群离线安装部署(二)--Spark-2.1.0 on Yarn安装:http://www.cnblogs.com/pojishou/p/6366570.html Apache Hadoop集群离线安装部署(三)--Hbase安装:http://www.cnblogs.com/po

制作c#安装程序/使用安装服务类自定义安装事件

第一步:建立工程 1.打开vs,新建项目->其他项目类型->安装和部署(),新建安装项目,命名为SetupTest. 2.新建工程后,可以在“解决方案资源管理器”里面看到子项:文件系统编辑器,注册表编辑器,文件类型编辑器,用户界面编辑器,自定义操作编辑器,启动条件编辑器.下面将会举例来说明各个地方怎么使用. 3.最简单的一个安装程序:点击“文件类型编辑器”,找到“应用程序文件夹”,添加->文件,选择你要打包的程序文件(譬如我的程序有run.exe和lib.dll组成),确定.在项目“Se

CDH4安装部署系列之四-安装高可用CDH4

1.1  CDH4服务器规划 编号 虚拟机IP 服务 1 10.255.0.120 Namenode1 RecourseManager zkfc 2 10.255.0.145 Namenode2 zkfc 3 10.255.0.146 Journalnode1 datanode1 NodeManager MapReduce Zookeeper 4 10.255.0.149 Journalnode2 datanode1 NodeManager MapReduce Zookeeper 5 10.25

saltstack-gdlwolf自学总结第一篇:saltstack的安装部署(YUM安装)

该博文主要是记录gdlwolf自己学习saltstack的过程中的知识点,本人非salt资深使用者,文章可能不对的地方,望参考此文章的读者能谅解 关于saltstack的介绍性的文章这里就不再进行描述.想看的可以自行百度,google.后期可能会补上自己对saltstack的理解性的文章. 一.环境准备: 1.1.准备4台虚拟机(我这里使用的是KVM,当然vmware之类的也是可以的) Hostname IP 角色 salt01 10.0.6.1 salt-master salt02 10.0.

C#ASP.NET打包安装部署文件一键安装网站,包括IIS站点创建、数据库附加。

最近在开发web网站安装部署,以前从来没有做过web的安装打包没有头绪就开始上网查资料. 查了两天资料发现网上的资料要么不全要么就有错误,我就总结了网上的资料重新整理的一番,经过本人测试可用无错误 一下为借鉴部分资料的原文地址 此链接为打包ASP.NET网站资料(这个资料有问题,在自定义操作哪一步详情看下面文章):http://www.cnblogs.com/fish520/archive/2016/09/22/5882450.html 此链接为创建IIS站点(其中代码不全我还借鉴的部分其他论坛

sublime3安装部署及插件安装

本文以sublime3 64位.Python3为例进行安装 一.sublime3安装 下载地址:https://download.sublimetext.com/Sublime%20Text%20Build%203211%20x64%20Setup.exe 安装步骤傻瓜式一路下一步 二.插件的安装 1.运行管理员权限打开sublime3 2.打开运行控制台,如下操作 3.在控制台中输入如下代码并回车 import urllib.request,os; pf = 'Package Control.

LAMP部署-- 二.编译安装Mysql

LAMP组件介绍 LAMP是指Linux.Apache,Mysql以及PHP的简称,目前许多生产环境的都是用的LAMP架构,在网络应用和开发环境方面,LAMP组合是非常棒的,它们的结合提供了强大的功能. Linux作为底层的操作系统,提供了灵活且安全的应用平台,为其他的组件稳定运行提供了保障: Apache作为web服务器,提供了功能强大.稳定与支撑能力突出的web平台: Mysql也是一款优秀的数据库软件: PHP是一种开发脚本语言,可以嵌入HTML中,适用于web开发: 准备工作 操作系统:

VMware Vsphere 6.0安装部署 Vsphere ESXi安装

Vsphere ESXi安装 ESXi作为虚拟化环境的Hypervisor层,负责将服务器虚拟成资源池,提供接口供管理组件调用,将下面的iso刻录成光盘或可启动U盘,安装在服务器裸机上: 下载地址请见上节 安装过程 开机做好阵列,选择从安装介质启动 按F11继续 输入密码:rootroot,密码最少要8位数字或字母,用vsphere client登录ESXi服务器时,账户名为root,密码为上面所设 按F2进入配置界面 这里只用配置管理网络 无论服务器连接了多少根网线,这里只用配置一个管理IP,

编译安装LAMP(二)——编译安装MySQL-5.5.28

1.准备数据存放的文件系统新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录. 2.新建用户以安全方式运行进程: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin mysql # chown -R mysql:mysql /mydata/data 3.安装并初始化mysql-5.5.28首先下载平台对应的m

LAMP编译安装(二)——安装Mariadb-5.5.45

背景介绍 从上一篇文章了解到,当服务器架构为下图中的类型时,PHP服务器会启动php-fpm服务侦听在一个特定的套接字上来等待httpd服务器的请求,如果请求中包含对后端Mysql服务器的访问,此时分为几种情况: 1.PHP服务器是独立服务器,或PHP服务器和httpd服务器在同一台主机,并以httpd服务器的一个模块方式存在,且都为编译安装,则编译时需要通过mysqlnd参数联系后端的Mysql服务器 2.PHP服务器为独立服务器,且不是编译安装,可能需要安装php-mysql客户端来连接My