简单的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 软件打包(一)相关推荐

  1. QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)

    QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64) 1.编译方式介绍: 2.动态编译方式打包发布QT程序: 方法一:手动复制 方法二:使用工具 问题& ...

  2. 常用的软件打包工具Inno Setup和AdvancedInstallerPortable

    文章目录 一.Inno Setup 打包工具 二.AdvancedInstallerPortable 打包工具 今天遇到一个问题一个朋友问我有没有什么好用的软件打包工具.我给他说我常用的两个打包软件I ...

  3. uos软件打包注意事项

    注意点1 uos的软件打包也是使用dpkg进行包安装处理,但是uos上的打包和普遍使用的ubuntu使用的dpkg的不太一样,具体需要参考官方文档: 应用审核规范 基于国产UOS操作系统deb包转uo ...

  4. Windows软件打包工具

    Windows软件打包工具 易量安装 NSIS

  5. 软件打包安装工具第一篇(安装包原理)

    软件安装程序原理代码编写 1.前言 2.要求 2.1.安装程序有一个安装界面(支持图片和动画) 2.2.添加软件许可界面 2.3.添加软件信息界面 2.4.添加支持安装路径 2.5.添加了安装进度界面 ...

  6. 软件打包安装工具第四篇(打包工具原理及技术)

    打包工具原理及技术 1.MV模型 2.打包原理 2.1.方案一 2.2.方案二 3.结束语 1.MV模型 打包工具采用的是MV模型,采用此模型的原因是因为打包界面中打包列表.文件列表以及属性面板显示的 ...

  7. 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 ...

  8. InstallShield 软件打包完整教程(含添加自定义依赖环境)

    任务说明:公司一个绿色版的软件,为安装部署是需要很多的环境依赖,如 DevExpress..net4.5.WinRAR等,客户提出安装复杂,并且有漏装后无法启动等情况,现将绿色版转安装版,并将依赖环境 ...

  9. 【QT】自定义软件打包发布

    自定义软件打包发布 安装nisi和nisedit. 打开nisedit. 点击--文件--新建脚本:向导. 设置名称等信息,点击下一步. 选择安装图标--设置安装语言,点击下一步. 选择授权文件(Li ...

最新文章

  1. sqlservier2005转成sqlserver2000中出现的问题(WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY])
  2. 已解决:大家使用原子哥的延时函数delay_ms,delay_us会出现进入延时函数出不来的情况
  3. C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法...
  4. 第三次学JAVA再学不好就吃翔(part45)--Object类
  5. java 多线程 扫描,多线程扫描文件夹耗时方法分析
  6. java 元数据 注解_Java元数据总结:Java注释的使用和定义
  7. 怎样用计算机打出seeyouagain,怎么唱好seeyouagain说唱
  8. 一文看懂:工程项目管理软件有哪些?怎么选?
  9. python 区块链开发教程_Python区块链教程(一)
  10. 手机电脑同连一个wf,手机网速比电脑网速快很多,电脑网速很慢
  11. c语言的虚拟变量,含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解...
  12. python 键盘输入负数_python输入负数
  13. 《中国人史纲》读书笔记:第六、七章 纪元前八、七世纪
  14. A Survey on Conversational Recommender Systems(2021)阅读笔记
  15. 最新智商测试html5,2017年最新智商测试题
  16. Lenient assertions(Unitils介绍三)
  17. SMBus与I2C的区别
  18. 度过有意义的生命(上)
  19. jquery html 乱码问题,jquery中文乱码怎么解决
  20. 富士施乐再推“中国定制”新品 引领中小企业智能化移动办公潮流

热门文章

  1. ElasticSearch- 单节点 unassigned_shards 故障排查
  2. 一个简单的扑克牌游戏(一)
  3. hdmi视频编码器怎么使用方法
  4. VS2008安装失败原因!
  5. 用OP07做电压跟随器——增益带宽积怎么不可靠
  6. oracle 正则 x00-xff,xff(xff头注入)
  7. RS|哨兵二号(.SAFE格式)转tif格式
  8. 高性能计算实验——矩阵乘法基于MPI的并行实现及优化
  9. 电机启动软启动必备!R型变压器软启动让起步顺畅!
  10. layer的使用笔记