关闭

【C#】WixToolset快速入门教程

标签: wixtoolsetwindowssetup
1087人阅读 评论(0) 收藏 举报
分类:

介绍

给windows系统做软件,常见的打包工具大家可能都听说过,如:大名鼎鼎的Installshield、Inno setup等。在遇见Wix之前InstallShield时我的主力打包工具,操作简单方便项目使用到的dll文件会自动添加,多语言支持也很好,不过不好的是免费版的功能就那几样,越来越无法满足自己的要求。后来就尝试了下Inno setup,这个是用脚本进行配置并生成安装包的,简单尝试之后发现实在麻烦还不好配置,于是就放弃了。再后来就遇到了WixToolSet,这个瑞士军刀一样的打包工具还是免费开源的,已经与VS整合到了一起,安装界面还可以根据WPF一样的xaml标签自定义样式,很是不错,但是国内教程较少而且有些说的也不是很清楚,学起来比较有难度。
之前的老项目升级了,打包时发现wix的打包流程又忘记了,所以这篇教程给自己提个醒,也就给大家带来了一个简单的快速入门教程。

要求

一个winform做的程序:

  1. 可以自定义安装位置
  2. 升级包可覆盖安装,不允许降级安装
  3. 桌面和开始菜单有启动/卸载的快捷方式
  4. 支持中文

开始

1.wix安装方法简单提一下:

Wix官网下载wix的安装包,然后进行安装。完了之后打开vs2017(vs2015)的扩展和更新,搜索【wix】,搜索到之后下载安装,然后重启vs即可。

2.新建wix项目

这里写图片描述
如图,选择v3类型的项目,不然本文接下来的代码可能不能用。

3.项目结构

具体结构简介,参考Wix 安装部署(一)同MSBuild 自动生成打包文件 这里不再赘述。

我的项目结构:
这里写图片描述

其中Product.wxs文件中有个Product节点:

这里写图片描述

这个节点里有三个属性比较重要,涉及到了上面要求中的软件升级部分。分别是:Id,Version,UpgradeCode。Id和UpgradeCode是GUID码,Version与微软定义的那一套Version一致,一共四部分组成,前三部分有变化才认为你的程序版本有变化。

我的项目中:
1. LibFiles文件夹:是我的项目中用到的所有的dll、config等文件。
2. Icons文件夹:是用到的一些图标。
3. References中添加了四个引用:第一个是我的winform程序要的库项目(dll),第二个是我的winfrom程序,这两个项目引用添加进来的目的就是为了项目代码有任何改动时,wix生成的包一直都是最新的。第三个和第四个是前面的那个链接中讲过,自定义安装界面所需要的两个dll。
4. license.rtf:是你程序的license。

4.Product.wxs的配置代码

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*"  Name="软件名称v2.0.0" Language="2052" Codepage="936" Version="2.0.0.0" Manufacturer="公司名称" UpgradeCode="6b89c3a7-f25c-4399-9df8-d0b40105cd82">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />
    <!--安装清单-->
    <Feature Id="ProductFeature" Title="SetupWixTest" Level="1">    <!--Feature安装清单-->
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="LibsAndFiles"/>
      <ComponentRef Id="ApplicationShortcut"/>
      <ComponentRef Id="DesktopFolderShortcut"/>
    </Feature>
    <WixVariable Id="WixUILicenseRtf" Value="license.rtf"/>
    <UI>                                                                  <!--安装风格-->
      <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR"/> 
      <UIRef Id="WixUI_InstallDir"/>
    </UI>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder" Name="PFiles">
        <Directory Id="INSTALLDIR" Name="SmartTool">                      <!--用户选择安装位置-->
        </Directory>
      </Directory>

      <Directory Id="ProgramMenuFolder">                                 <!--在windows开始菜单中显示-->
        <Directory Id="ApplicationProgramsFolder" Name="软件名称"/>
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop"/>
    </Directory>
  </Fragment>

  <Fragment>                                                                  <!--定义需要添加的文件的位置-->
    <ComponentGroup Id="ProductComponents" Directory="INSTALLDIR">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <Component Id="ProductComponent">
        <File Id="SmartTool.exe" Source="$(var.TianHuangPing.TargetPath)"/>
      </Component>
      <Component Id="LibOne">
        <File Source="$(var.OrderFoodLib.TargetPath)"/>
      </Component>
    </ComponentGroup>

    <DirectoryRef Id="INSTALLDIR">                                      
      <Component Id="LibsAndFiles" Guid="ae8c83a1-7615-4439-bf90-4c39db24986f">
        <File Id="AutoChangComboBox1.dll" Source="LibFiles/AutoChangComboBox.dll"/>
        <File Id="AutoChangCombo1Box.dll" Source="LibFiles/DevExpress.BonusSkins.v16.2.dll"/>
        <File Id="AutoCha1ngComboBox.dll" Source="LibFiles/DevExpress.Data.v16.2.dll"/>
        <File Id="AutoChang1ComboBox.dll" Source="LibFiles/DevExpress.Printing.v16.2.Core.dll"/>
        <File Id="AutoChangC1omboBox.dll" Source="LibFiles/DevExpress.Sparkline.v16.2.Core.dll"/>
        <File Id="AutoC1hangComboBox.dll" Source="LibFiles/DevExpress.Utils.v16.2.dll"/>
        <File Id="AutoChangComboww1Box.dll" Source="LibFiles/DevExpress.XtraBars.v16.2.dll"/>
        <File Id="Aut1oChangComboBox.dll" Source="LibFiles/DevExpress.XtraEditors.v16.2.dll"/>
        <File Id="AutoChangCo1mboBox.dll" Source="LibFiles/DevExpress.XtraGrid.v16.2.dll"/>
        <File Id="AutoCh2angComboBox.dll" Source="LibFiles/DevExpress.XtraLayout.v16.2.dll"/>
        <File Id="AutoChangC2omboBox.dll" Source="LibFiles/DevExpress.XtraPrinting.v16.2.dll"/>
        <File Id="Au2toChangComboBox.dll" Source="LibFiles/Impinj.OctaneSdk.dll"/>
        <File Id="AutoC2hangComboBox.dll" Source="LibFiles/LLRP.dll"/>
        <File Id="AutoChangCombo2Box.dll" Source="LibFiles/LLRP.Impinj.dll"/>
        <File Id="AutoChangCombo22Box.dll" Source="LibFiles/MR6100Api.dll"/>
        <File Id="configFile" Source="LibFiles/TianHuangPing.exe.config"/>
        <File Id="mannifestFile" Source="LibFiles/TianHuangPing.exe.manifest"/>
     </Component>
    </DirectoryRef>

    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="5A254682-DD5F-453D-8333-144457282026">
        <Shortcut Id="LunchApplicationShortcut" Name="软件名称" Description="启动软件名称" Target="[INSTALLDIR]TianHuangPing.exe" WorkingDirectory="INSTALLDIR">
          <Icon Id="ico_install" SourceFile="Icons/logo.ico"/>
        </Shortcut>
        <Shortcut Id="UninstallApplicationShortcut" Name="卸载软件名称" Description="卸载软件名称" Target="[SystemFolder]msiexec.exe" WorkingDirectory="SystemFolder"  Arguments="/x [ProductCode]">
          <Icon Id="ico_uninstall" SourceFile="Icons/logo.ico"/>
        </Shortcut>
        <RemoveFolder Id="ApplicationProgramsFolder" On ="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\SmartTool" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
        <util:InternetShortcut Id="OnlineDocumentationShortcut" Name="获取在线帮助" Target="http://www.hdu.edu.cn"/>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="DesktopFolder">
      <Component Id="DesktopFolderShortcut" Guid="5A254676-DD1F-453D-8333-144457282027">
        <Shortcut Id="DesktopShortcut" Directory="DesktopFolder" Name="软件名称" Target="[INSTALLDIR]TianHuangPing.exe" WorkingDirectory="INSTALLDIR" Icon="ico_install">
        </Shortcut>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\SmartTool" Name="installed" Type="integer" Value="1" KeyPath="yes"/>

      </Component>
    </DirectoryRef>

  </Fragment>
</Wix>

这个配置文件不是很难懂,大部分都可参考Wix 安装部署(一)同MSBuild 自动生成打包文件 进行理解。这个链接看完之后,我们要求里的第1,2,3点你应该都可以实现了。不过第2点中的升级包如何安装覆盖,我再详细解释一下:

Product标签中的id、upgradecode、version属性来控制版本的升级和降级。你的产品每次发布一个新版本,id都要分配一个新的GUID,version都要分配一个新的version,但是upgradecode要用同一个(不能改变)。即:同一个产品只用同一个upgradecode,不同的upgradecode认为是不同的产品,同一个产品的不同版本用不同的id和version。这里id属性我赋值为“*”,表示每次生成安装包wix会自动在这里分配一个新的GUID,不用我自己管。

所以,新版本安装包的制作流程是:

  1. upgradecode保持不变。
  2. version从1.0.0.0换成1.0.1.0.
  3. id设置为*,或者赋值一个新的GUID。

这样新的安装包安装时才不会提示与旧的冲突,也不会变成安装了两个完全一模一样的软件。

对于需求中的第4点,制作一个中文安装包:
此时如果你编译项目的话肯定时编译不过去的,因为Product.wxs中有中文的存在。如果需要安装界面时中文的,而且配置文件中的中文也要能够显示在界面上,就需要在这里配置成zh-CN。如要制作其他的语言包,请自行参考官方文档。
右键你的项目–属性:
这里写图片描述

5.展示

这里写图片描述

这里写图片描述

这里写图片描述


重要提示:在编写你的Product.wxs配置文件过程中一定要记得把bin文件下的所有dll、.config、.manifest等重要的文件配置进去,否则会有问题。

参考:
随笔分类 -Wix
WiX Toolset Manual Table of Contents

0
0
查看评论

Wix Toolset总结

一、五种UI对话框 设置对话框:eg. UIRef Id=”WixUI_Minimal” /> WixUI_Advanced:提供了与WixUI_Minimal类似的一键安装形式,但提供了高级选项按钮。高级选项中,我们可以选择该产品是安装给当前用户还是给所有用...
  • yjarj123
  • yjarj123
  • 2016-01-11 11:20
  • 954

使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一)——初识WiX

Visual Studio 打包安装七宗罪           开发.NET的人,肯定会使用Visual Studio里面自带的MSI打包安装工具框架。如果是在一般情况下,这个打包安装框架已经完全足够满足产...
  • rryqsh
  • rryqsh
  • 2012-12-09 15:53
  • 12850

WIX安装图文并茂简易说明

一、           环境配置 1.      安装VS2012 2.    ...
  • xxdddail
  • xxdddail
  • 2013-10-12 15:09
  • 3950

Wix 安装教程

original link :  http://www.cnblogs.com/stoneniqiu/p/3355086.html 因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同。我自己也在测试过程中,写下过程,以供参考。最...
  • w_vc_love
  • w_vc_love
  • 2014-01-24 15:48
  • 7400

使用WIX制作C#应用程序的安装包

1. 下载安装wix3.9从网站: http://wixtoolset.org/releases/  2. 安装完成wix,就可以在vs2012里使用了。3. 创建项目 <Product Id="4963AEC3-4CD1-46C3-8986-07F9EB6...
  • caimouse
  • caimouse
  • 2016-05-26 11:48
  • 1741

WIX制作C#应用程序安装包

  • 2016-05-26 11:40
  • 12KB
  • 下载

wix教程wix教程

  • 2011-04-14 23:09
  • 490KB
  • 下载

使用WiX打包你的应用程序之一---基本应用

使用WiX打包你的应用程序之一---基本应用 很多从事开发的同行,在程序部署方面经常遇到这样一些问题: 程序部署复杂,无法搞定,甚至于必须开发人员到现场去安装调试; Visual Studio Deployment 项目难以使用及定制 使用Install Shield等比较费钱的工具(如...
  • softuse
  • softuse
  • 2015-09-13 19:33
  • 987

【VS开发】Wix 安装教程

original link :  http://www.cnblogs.com/stoneniqiu/p/3355086.html 因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同。我自己也在测试过程中,写下过...
  • LG1259156776
  • LG1259156776
  • 2017-01-20 16:17
  • 1274

使用WiX打包你的应用程序之二---向WiX脚本传递信息(属性)的几种方式

使用WiX打包你的应用程序之二---向WiX脚本传递信息(属性)的几种方式 这个系列的第一篇文章,向大家演示了一个最简单的WiX实例.这一篇开始,作为一个逻辑上的延展,我们有义务让WiX引擎知道去哪里取得需要打包的文件. 更深入的,我们需要让WiX在编译生成的时候,动态的知道一些信息.传递动态...
  • softuse
  • softuse
  • 2015-09-13 19:33
  • 532
    个人资料
    • 访问:206185次
    • 积分:2788
    • 等级:
    • 排名:第14688名
    • 原创:90篇
    • 转载:18篇
    • 译文:1篇
    • 评论:36条
    文章分类
    最新评论