Wix 安装部署(二)自定义安装界面和行为
上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnblogs.com/stoneniqiu/p/3355086.html 。
这篇会在上篇的基础上继续探索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就是你的许可证书。再次生成,安装的时候就在第一页看到了。
不要直接修改后缀,要用word转换,不然会不显示或者报错
<WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
WixVariable是wix比较先进的个功能,Value不能为空。同样我们可以换掉图片及其他。WixUIDialogBmp的图片会出现在欢迎页和安装完成页,规格是 493 × 312。
WixUIBannerBmp 的图片会出现正上方。规格493 × 58,用bmp格式 xp才会显示正常。也不要直接改后缀,用图片处理软件转换。
<WixVariable Id="WixUIDialogBmp" Value="bb.bmp"/>
<WixVariable Id="WixUIBannerBmp" Value="top.bmp"/>
还有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=""[dirAD8BC174523EABBBEA5FE139FD0C5127]install.bat""/>
<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,其他地方同理。这样可以避免多次重复的修改,做到文字和配置的分离。
这一节先到这里,今天眼睛都看花了,自定义的还不止这些,明天继续.....
全部代码:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="!(loc.ApplicationName)"
Language="1033" Version="1.0.0.0" Manufacturer="RJStone" UpgradeCode="3486eddf-0957-45cf-8c26-3de8bceca2b4">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate /> <Feature Id="ProductFeature" Title="Setup07" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature> <UI>
<UIRef Id="WixUI_Minimal" />
<Publish Dialog="ExitDialog"
Control="Finish"
Event="DoAction"
Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI> <WixVariable Id="WixUILicenseRtf" Value="lisences.rtf" />
<WixVariable Id="WixUIDialogBmp" Value="bb.jpg"/>
<WixVariable Id="WixUIBannerBmp" Value="top.jpg"/> <Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Thank you for installing this product." />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch this Application " /> <Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> </Product> <Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Setup07" />
</Directory>
</Directory>
</Fragment> <Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<Component Id="ProductComponent">
<File Id="myapplication.exe" Source="$(var.MyApplication.TargetPath)" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
还是那句话,如果对你有帮助,就顶一下吧
Wix 安装部署(二)自定义安装界面和行为的更多相关文章
- Apache Hadoop集群离线安装部署(二)——Spark-2.1.0 on Yarn安装
Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...
- Oracle 19C的下载和安装部署(图形安装和静默安装)
Oracle 19C的下载和安装部署(图形安装和静默安装) https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/ ...
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
- 修改office2019安装位置,自定义安装需要的功能
更新:2019.5.30楼主本人本次重装系统后装office2019再次测试,没有任何问题,没认真看文章,自己胡乱一同操作,导致各种问题的,出了错就就瞎评论,说博主误导人,对你们这种人就是呵呵.左转不 ...
- Apache Hadoop集群离线安装部署(三)——Hbase安装
Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...
- zabbix的安装部署及自定义监控的实现
此篇感谢我的小师傅. 1. Zabbix主要功能和优劣势说明 1. Zabbix主要功能和优劣势说明 1.1 Zabbix主要功能: 1)Application monitoring 应用监控 数据库 ...
- zabbix 3.2.5 agent端(源码包)安装部署 (二)
一.zabbix agent 端安装部署 1.创建zabbix用户和组 groupadd zabbix useradd -g zabbix zabbix -s /sbin/nologin 2.解压za ...
- zabbix 3.2.2 agent端(源码包)安装部署 (二)
一.zabbix agent 端安装部署 1.创建zabbix用户和组 # groupadd zabbix # useradd -g zabbix zabbix -s /sbin/nologin 2. ...
- [转]C# 应用程序安装部署步骤,安装前操作,先退出程序后卸载。
1. 点击[文件]-[新建]-[项目]-其他项目类型-安装和部署,选择安装项目,在下面的名称栏填写SetupTest(或者选择安装向导,一直点击[下一步])2. 安装项目----六个子项依次为:文件系 ...
- ELK日志监控平台安装部署简介--Elasticsearch安装部署
最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...
随机推荐
- Excel的文件打开特别慢,xls文件特别大解决一例
Excel的文件打开特别慢,xls文件特别大解决一例 打开Excel的xls文件打开特别慢,而且操作也非常慢,动辄需要10几20分钟,很不正常.一个简单的Excel的xls文件有10几兆,甚至几百兆的 ...
- mongoDB 使用手册
1.基本操作db.AddUser(username,password) 添加用户db.auth(usrename,password) 设置数据库连接验证db.cloneDataBase(fromh ...
- asp.net项目下的web service返回json数据问题
App_Code目录下放置WebService.cs文件,文件内容如: using System; using System.Collections.Generic; using System.Dat ...
- 使用VisualVM监控远程服务器JVM
VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...
- 详解log4j2(下) - Async/MongoDB/Flume Appender 按日志级别区分文件输出
1. 按日志级别区分文件输出 有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现. 假定需求是把 ...
- 1032 - A-B 组合数学
http://www.ifrog.cc/acm/problem/1032 1032 - A-B Time Limit:1s Memory Limit:128MByte Submissions:680S ...
- Python全栈---5.1---装饰器
一.装饰器 执行outer函数,将index作为参数传递, 将outer函数的返回值,重新赋值给index 装饰器可以在函数执行前和执行后执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之 ...
- Windows XP SP3下编译安装openssl-1.1.0b
软件需要: openssl-1.1.0b visual studio 2010(cn_visual_studio_2010_ultimate_x86_dvd_532347.iso) perl:Acti ...
- Winform中DockPanel(引用WeifenLuo.WinFormsUI.Docking.dll组件)的使用
WeiFenLuo.WinFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可实现像Visual Studio的窗口停靠.拖拽等功能.WeifenLuo.Win ...
- 安装数据库出现错误vc_red.msi找不到
用虚拟光驱安装数据的时候可能会出现,找不到vc_red.msi的问题,通过加载的虚拟光驱目录设置,可能 仍然后问题,比如程序停止运行. 解决方法是:解压iso文件,用解压后的文件安装.然后在解压文件夹 ...