利用WIX制作安装包(1)
2016-05-09 21:37
423 查看
#installation
下载最新版本的WIX toolset 并安装DOWNLOADWix toolset V3.5之后的版本已经可以集成到visual studio,我们可以直接在vs中编写代码,并借助vs进行编译。
#demo
首先打开 Visual Studio,然后选择创建WIX Setup Project. 创建完成之后的在项目中我们可以看到一个名为Product.wxs的文件,其代码如下:
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="8e1efb05-1e12-40e5-abca-c8bd7965bf2a"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate /> <Feature Id="ProductFeature" Title="SetupProject1" Level="1"> <ComponentGroupRef Id="ProductComponents" /> </Feature> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="SetupProject1" /> </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> --> </ComponentGroup> </Fragment> </Wix>
属性介绍:
1. UpgradeCode 标签中的 UpgradeCode 是产品的版本id。产品的升级卸载全部要用到它,一旦指定之后就不要修改。 2. product标签中的 id 是该产品当前版本的id。它每次在升级版本的时候都需要改变。 3. Directory 定义产品安装目录的目录结构 4. Feature 产品的功能列表 5. MajorUpgrade 防止产品降级安装。 6. Manufacturer 公司或者组织名称
#file
项目创建完成之后,我们需要往安装包里面添加文件。WIX添加文件的方法很方便,直接使用<File Source="文件路径" />就可以把一个文件添加到安装包中来。
文件路径可以用绝对路径和相对路径来表示,在Wix中相对路径的可能需要用到变量。例如:
$(var.ReferencedProjectName.TargetDir) 表示项目中引用的另一项目‘ReferencedProjectName‘的输出路径 $(env.WIXPATH) 表示系统的环境变量WIXPATH所指向的路径。 关于其它的表示方法请大家参阅官网。
在这里我们在项目中添加一个文件夹
resource, 并在这个文件夹下添加一个
TextFile1.txt,然后在上述代码中的
//todo注释的下面添加如下代码
<Component Id="ProductComponent" Guid="7B428173-1277-482B-BC2E-CC008F3B79F9"> <File Source="resource/TextFile1.txt" /> </Component>
然后指定
Manufacturer后就进行编译,编译成功之后进行安装,之后大家在
c:/programfiles(X86)/SetupProject1的目录下就可以看到
TextFile1.txt文件了。就这样一个简单的安装包就制作成功了。 但是这一一个简单的安装包绝对不能满足我们日常的工作需要。下面我将为大家介绍如何实现一些另外的操作
#directory
自定义安装目录结构。修改directory结构目录为如下<Fragment> <Directory Id="TARGETDIR" Name="SourceDir" <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="SetupProject1"> <Directory id="LOG" name="log"/> <Directory id="DATA" name="data"/> </Directory> </Directory> </Directory> </Fragment>
然后重新编译安装。就会发现安装之后的目录结构已经变成了如下
-ProgramFiles(x86) --SetupProject1 ---log ---data
#ui
WIX默认为我们提供了五种UI类型。关于每种UI的样式。请大家自己尝试或者查看文档。WixUI_Advanced Dialog Set
WixUI_FeatureTree Dialog Set
WixUI_Minimal Dialog Set
WixUI_Mondo Dialog Set
WixUI Dialogs
如果我们要引用任一UI,我们只需要在
product.wxs文件中添加如下代码
<UIRef id="WixUI_Advanced"/>
然后编译运行,就会看到UI已经发生了改变。如果需要自定义UI则需要重新编写一个UI,然后添加到
WixUI_Advanced的 UI Sequence中去.(请见下一篇)
#action
WIX 允许我们自定义Action。如果需要自定义Custom Action,我们需要另外创建一个类型为C# Custom Action Project的项目。创建成功后,在项目中添加一个
CustomAction.cs然后编辑代码如下:
using System; using System.Collections.Generic; using System.Text; using Microsoft.Deployment.WindowsInstaller; namespace CustomAction1 { public class CustomActions { [CustomAction] public static ActionResult CustomAction1(Session session) { session.Log("Begin CustomAction1"); return ActionResult.Success; } } }
这样一个自定义的方法就定义好了。然后编译项目。该项目编译成功之后会有两个输出文件
CustomAction.dll和
CustomAction.CA.dll. 其中以
CA.dll结尾的文件才是我们所需要的文件。 然后我们把CustomAction项目添加到之前创建的项目的引用中去。然后添加文件
customAction.wxs并添加如下代码
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Fragment> <Binary Id="BINARYFILE" SourceFile="$(var.CustomAction.TargetDir)CustomAction1.CA.dll" /> <CustomAction Id="CustomAction1" BinaryKey="BINARYFILE" DllEntry="CustomAction1" /> </Fragment> </Wix>
这样一个CustomAction就创建并引入成功了。下面我们就可以调用这个方法了。在WIX中Action的执行时有顺序的。如果我们要添加一个自定义事件,我们必须要指定它在什么事件之前或者之后执行,见如下代码,关于WIX的事件顺序请参考事件顺序
<InstallExecuteSequence> <Custom Action="CustomAction1" After="InstallFiles"/> </InstallExecuteSequence>
上述代码指定了在
InstallFiles方法执行完成之后立马执行
CustomAction1. 就这样,一个自定义的方法就定义成功,并且被成功调用了。
利用自定义的CustomAction我们可以做一些自定义操作。比如写log文件或者其它。
下一篇我将为大家介绍如何使用WIX制作自定义界面,并且将自定义界面添加到UI序列中去
相关文章推荐
- Visual Studio 2010 Service Pack 1多国语言版下载
- CUDA 4.0 + Visual Studio 开发环境搭建
- Visual Studio 2012/2010/2008 远程调试
- Web.config配置文件详解
- 小白探访WINDOWS下的驱动(五) 第一个HELLO驱动(插曲-调试环境设置HOST&TARGET)
- Installshield 2010 修改Setup.exe图标
- 使用VS2013_X68;PCL1.7.2;QT5;VTK6.2实现qt显示PCL
- 把nasm集成到Visual studio 2013中
- 无法打开文件“opencv_calib3d240d.lib”
- dcmtk提示无法解析的外部符号(unresolved external symbol)的解决方法
- VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
- Visual Studio 2013之Opendv配置【未完】
- MacOS:VirtualBox下Win10虚拟环境搭建
- VS2015第一个小程序:HelloAnimal!
- 使用VS从DLL中生成LIB文件
- Remote debug in windows
- 安装visual studio时遇到的IE限制问题
- Visual Studio 的断点调试技巧
- VC++错误:error C2065: 'SHCreateDirectoryEx' : undeclared identifier
- VB 2010中Excel文件处理的一个奇怪问题