Wix 软件打包(一)
简单的wix安装打包
对winform或者wpf打包visual studio有自己的插件VS Installer,但是使用时遇到一些问题,如桌面快捷方式指向的文件不是运行程序,安装运行环境时每个环境都需要询问无法跳过等,在网上看到Wix(Windows Intstall XML)打包的方式。Wix是一种使用xml脚本配置部署的打包方式
1、首先在官网(https://wixtoolset.org/)下载WiX Toolset build tools 进行安装
点击Install安装,我这里是已经安装完成
2、Visual Studio 安装Wix Toolset Extension扩展功能
3、创建winform客户端MyApplication与打包项目 Setup for WIX 取名WxiSetup
WxiSetup 添加MyApplication的项目引用,在Product.wxs配置安装。
4、提示:代码说明
<Product Id="*" Name="WxiSetup" Language="2052" Version="1.0.0.0" Manufacturer="*******" UpgradeCode="abaddda2-473c-4b8c-8d7a-7b6fad502cd4"><!-- 配置节点 --><MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /><MediaTemplate /><Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /><Feature Id="ProductFeature" Title="WxiSetup" Level="1"></Feature >
</Product>
Product 属性说明
Name 为安装包名称,注册表也是保存当前配置
Language 为区域性标志符(LCID)常见参数 1033 表示英语(美国),2052表示简体中文
Version 为安装包版本号
Manufacturer 为生产厂商
UpgradeCode 升级编码,随机GUID
节点说明
Package 记录了记录一些安装包的信息
InstallerVersion: 安装此安装包需要的最小Windows Installer版本,用Windows Installer的主要版本乘以100 加上Window Installer的次要版本。 比如 “200” 代表的是Windows Installer2.0,而405代表的是Windows Installer4.5.
Compressed: 这个为Yes 表示在源文件中含有压缩文件,对于Merge Module这个属性不必设置。反正为 NoType.
InstallPrivileges: 字面意思为安装优先级,有limited 和 elevated两种 后者是默认值,
InstallScope: 值为枚举类型,字面意思为安装范围,值必须是perMachine 或者 perUser. 看文档不知道确切的用处,先放过。MajorUpgrade 这个元素支持防止降级
AllowDowngrades:即回到低版本,如果设置为No(默认值) 会被阻止,这个时候DowngradeErrorMessage 属性必须设置,以给出提示。
DowngradeErrorMessage:当你安装一个低版本的安装包时会给出的提示。Feature 一个特性表,特性是可安装的最小单元。 子元素中的ComponentGroupRef 是和 ComponentGroup对应的。前者相当于一个安装目录,后者记录了安装文件的具体位置。
Id: 唯一标识。
Title: 就是个短的说明。
Level: 安装的等级,值为0 会使这个特性无效,默认值为1
Absent: 这个属性定义User是否有权在用户接口中去选择使某个特性不安装(absent),值为allow或者disallow之一Fragment 元素是在wix中创建一个安装数据库的基础块(msi文件就是个数据库)。它的子元素中含有*Ref的元素必须有对应的单元,比如在Fragment中含有两个Component元素,那么 你必须在Feature中用ComponentRef 与Component对应. 默认生成的文档中含有两个Fragment块。 一个包含的是Directory,一个包含的是ComponentGroup ,前者指的是安装目录,后者顾名思义就是Component的一个集合。
<Feature Id="ProductFeature" Title="WxiSetup" Level="1"><ComponentGroupRef Id="ProductComponents" />
</Feature ><Fragment><Directory Id="TARGETDIR" Name="SourceDir"><Directory Id="ProgramFilesFolder" Name="PFiles"><Directory Id="INSTALLFOLDER" Name="WxiSetup" /></Directory></Directory>
</Fragment><Fragment><ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"><Component Id="ProductComponent"><!--<File Id="myapplication.exe" Source="$(var.MyApplication.TargetPath)" />--><File Id="myapplication.exe" Source="$(var.MyApplication.TargetDir)MyApplication.exe" /><File Id="myapplication.exe.config" Source="$(var.MyApplication.TargetDir)MyApplication.exe.config" /></Component></ComponentGroup>
</Fragment>
- Directory 产品的安装目录。第一个Directory Id=TARGETDIR 是根目录,每一个wix工程都会有这个目录元素,第二个Id=ProgramFilesFolder 对应的就是C:\Program Files\ ,64位的就在x86下,第三个元素就是我们自己的应用程序所在的文件夹,最终形成就是c:\Program Files\WxiSetup 在默认的提示中 也可以看见在Component 中添加安装文件,资源,注册表等。这里可以看见最里面的Directory的Id=INSTALLFOLDER是和第二个Fragment中的ComponentGroup的Directory属性是一致的。在Component中就是每一个你需要安装的单元以及它的位置。
$(var.MyApplication.TargetPath)是wix引用变量
$(var.MyApplication.TargetDir)指引用项目的Debug或者Release文件夹,后面的MyApplication.exe指文件夹中的文件,所有引用的Dll文件都需要手动添加
5、添加引导UI界面,需要引用WixUIExtension.dll,该文件在WiX Toolset build tools的安装目录bin文件夹下
在Product下添加UI节点
<UI> <UIRef Id="WixUI_InstallDir" /></UI>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
Wix提供了5种UI风格
WixUI_Advanced
WixUI_FeatureTree
WixUI_InstallDir 带有选择安装目录
WixUI_Minimal 简洁安装
WixUI_Mondo 自定义模块安装
Property安装配置特性。
Id: 属性的名称 。WIXUI_INSTALLDIR只有存在选择安装路径界面存在是才有用,显示没人安装目录
Value: 属性的参数,代码为目录Directory节点的Id
常用Id参数WIXUI_INSTALLDIR 安装默认路径
WIXUI_EXITDIALOGOPTIONALTEXT 安装成功界面显示文字
WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT 安装成功界面添加复选框(例安装完成打开软件)
WixShellExecTarget 执行事件的目标,需要和执行事件一起使用,在接下来的文章回讲到
6、修改程序图标与控制面板图标
在Product下添加Icon节点
<Icon Id="App.ico" SourceFile="$(var.MyApplication.TargetDir)\App.ico" />
- Icon 程序图标。
使用Property节点修改控制面板图标
<Property Id="ARPPRODUCTICON" Value="App.ico" />
7、 右键WxiSetup生成,在Debug或者Release文件夹下生成安装包
点击msi文件安装
完整代码:
<?xml version="1.0" encoding="UTF-8"?>
<!-- The name of the product -->
<?define Name = "MyApplication" ?>
<!-- The Description of the product -->
<?define Description = "MyApplication is a winform desktop application." ?>
<!-- The manufacturer, for setup package publisher and folder info -->
<?define Manufacturer = "MyApplication Company Name" ?>
<!-- The version number of this setup package-->
<?define Version = "1.0.0" ?>
<!-- UpgradeCode must be unique and not changed once the first version of the program is installed. -->
<?define UpgradeCode = "{abaddda2-473c-4b8c-8d7a-7b6fad502cd4}" ?>
<!-- The name of the Cabinet -->
<?define CabName = "MyApplication.cab" ?><Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" ><Product Id="*" Name="$(var.Name)" Language="2052" Version="$(var.Version)"Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)"><Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /><!-- 程序图标 --><Icon Id="App.ico" SourceFile="$(var.MyApplication.TargetDir)\App.ico" /><!-- 控制面板引用程序图标 --><Property Id="ARPPRODUCTICON" Value="App.ico" /><!-- 允许升级和防止降级 --><MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /><!--将cab文件嵌入 msi文件--><Media Id="1" Cabinet="$(var.CabName)" EmbedCab="yes" /><!--<MediaTemplate />--><Feature Id="ProductFeature" Title="WxiSetup" Level="1"><ComponentGroupRef Id="ProductComponents" /><!-- 安装目录 --><!--<ComponentRef Id="Config.xml"/><ComponentRef Id="myapplication.exe"/>--><ComponentRef Id="ApplicationShortcut" /><ComponentRef Id="DesktopFolderShortcut" /><!--<ComponentGroupRef Id="ComponentGroupDesktopShortcut" />--><ComponentRef Id="Config.xml"/></Feature><UI><UIRef Id="WixUI_InstallDir" /></UI><WixVariable Id="WixUILicenseRtf" Value="license.rtf" /><!--<WixVariable Id="WixUIDialogBmp" Value="bmg.bmp"/><WixVariable Id="WixUIBannerBmp" Value="top.bmp"/>--><!-- Property 安装成功或显示WIXUI_INSTALLDIR 选择安装路径WIXUI_EXITDIALOGOPTIONALTEXT 显示文字WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT 添加复选框是否直接打开软件WixShellExecTarget 执行事件的目标--><Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /><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" /><!-- WixUI模板WixUI_Minimal 简洁模板,直接安装WixUI_Mondo 自定义模板,选择安装模块WixUI_InstallDir 安装选择路径--><UIRef Id="WixUI_Common" /></Product><Fragment><Directory Id="TARGETDIR" Name="SourceDir"><Directory Id="ProgramFilesFolder" Name="PFiles"><Directory Id="INSTALLFOLDER" Name="$(var.Name)" /></Directory></Fragment><Fragment><!-- Component 属性 Permanent='yes' 卸载时文件不删除 --><ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"><Component Id="ProductComponent"><File Id="myapplication.exe" Source="$(var.MyApplication.TargetDir)MyApplication.exe" /><File Id="myapplication.exe.config" Source="$(var.MyApplication.TargetDir)MyApplication.exe.config" /></Component></ComponentGroup></Fragment>
</Wix>
Wix 软件打包(二) 自定义安装界面和行为
Wix 软件打包(一)相关推荐
- QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)
QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64) 1.编译方式介绍: 2.动态编译方式打包发布QT程序: 方法一:手动复制 方法二:使用工具 问题& ...
- 常用的软件打包工具Inno Setup和AdvancedInstallerPortable
文章目录 一.Inno Setup 打包工具 二.AdvancedInstallerPortable 打包工具 今天遇到一个问题一个朋友问我有没有什么好用的软件打包工具.我给他说我常用的两个打包软件I ...
- uos软件打包注意事项
注意点1 uos的软件打包也是使用dpkg进行包安装处理,但是uos上的打包和普遍使用的ubuntu使用的dpkg的不太一样,具体需要参考官方文档: 应用审核规范 基于国产UOS操作系统deb包转uo ...
- Windows软件打包工具
Windows软件打包工具 易量安装 NSIS
- 软件打包安装工具第一篇(安装包原理)
软件安装程序原理代码编写 1.前言 2.要求 2.1.安装程序有一个安装界面(支持图片和动画) 2.2.添加软件许可界面 2.3.添加软件信息界面 2.4.添加支持安装路径 2.5.添加了安装进度界面 ...
- 软件打包安装工具第四篇(打包工具原理及技术)
打包工具原理及技术 1.MV模型 2.打包原理 2.1.方案一 2.2.方案二 3.结束语 1.MV模型 打包工具采用的是MV模型,采用此模型的原因是因为打包界面中打包列表.文件列表以及属性面板显示的 ...
- 323个精品小工具软件打包合集
323个精品小工具软件打包合集 (电驴下载:ed2k://|file|323%E4%B8%AA%E7%B2%BE%E5%93%81%E5%B0%8F%E5%B7%A5%E5%85%B7.rar|613 ...
- InstallShield 软件打包完整教程(含添加自定义依赖环境)
任务说明:公司一个绿色版的软件,为安装部署是需要很多的环境依赖,如 DevExpress..net4.5.WinRAR等,客户提出安装复杂,并且有漏装后无法启动等情况,现将绿色版转安装版,并将依赖环境 ...
- 【QT】自定义软件打包发布
自定义软件打包发布 安装nisi和nisedit. 打开nisedit. 点击--文件--新建脚本:向导. 设置名称等信息,点击下一步. 选择安装图标--设置安装语言,点击下一步. 选择授权文件(Li ...
最新文章
- sqlservier2005转成sqlserver2000中出现的问题(WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY])
- 已解决:大家使用原子哥的延时函数delay_ms,delay_us会出现进入延时函数出不来的情况
- C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法...
- 第三次学JAVA再学不好就吃翔(part45)--Object类
- java 多线程 扫描,多线程扫描文件夹耗时方法分析
- java 元数据 注解_Java元数据总结:Java注释的使用和定义
- 怎样用计算机打出seeyouagain,怎么唱好seeyouagain说唱
- 一文看懂:工程项目管理软件有哪些?怎么选?
- python 区块链开发教程_Python区块链教程(一)
- 手机电脑同连一个wf,手机网速比电脑网速快很多,电脑网速很慢
- c语言的虚拟变量,含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解...
- python 键盘输入负数_python输入负数
- 《中国人史纲》读书笔记:第六、七章 纪元前八、七世纪
- A Survey on Conversational Recommender Systems(2021)阅读笔记
- 最新智商测试html5,2017年最新智商测试题
- Lenient assertions(Unitils介绍三)
- SMBus与I2C的区别
- 度过有意义的生命(上)
- jquery html 乱码问题,jquery中文乱码怎么解决
- 富士施乐再推“中国定制”新品 引领中小企业智能化移动办公潮流