我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件。这里以.Net Framework组件作为必备组件为例:
7.1 检测.Net Framework 版本
步骤1:为安装项目添加WiX .NET extensions库的引用
如果是命令行方式使用wix,那么需要在candle和light的时候添加如下参数:
-ext WiXNetFxExtension
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<PropertyRef Id="NETFRAMEWORK20"/>“NETFRAMEWORK20”就是.NET Framework extensions 中预定义的.Net Framework 2.0的属性;如果需要检测中文语言包,那么还必须添加”NETFRAMEWORK20_ZH_CN_LANGPACK” 属性;查看所有现有版本的.NET Framework的Properties,可以翻阅wix 帮助文档。
我们可以在安装程序的启动条件中使用预定义的属性,从而判断系统是否安装指定的.NET Framework组件,如:
<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
[CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>
移除Product.wxs,将Sample示例源文件拷贝到wix Project所在的目录,并添加到wix项目中;添加wix命名空间中的wix Extension组件的引用,如图:
使用candle命令编译时,我们使用了变量参数-dVersion=1.0.0,这里同样需要设置,右键项目名称——》属性——》Build选项卡——》设置Build参数:
最后编译生成Sample项目,生成的安装文件在../bin/Debug/zh-cn下,我们也可以在上面的Build参数中指定安装语言,也可以同时生成多种语言版本的安装程序。
需要注意的是:在使用vs制作中文安装包时,如果引用了WixSqlExtension组件,那么就必须把SqlExtension的中文资源文件(点击下载)包括在项目中,否则会编译错误。而在命令行模式下制作中文安装包时,可以不使用SqlExtension中文资源文件,默认会使用自带的英文资源文件。
步骤2: 用编辑器打开.wixproj文件
首先,在vs中打开示例中的Sample项目,然后在解决方案管理器(Solution Explorer)中右键Sample项目,选择卸载项目(Unload Project),继续在解决方案管理器(Solution Explorer)中右键Sample项目,选择编辑Sample.wixproj。
步骤3: 添加必备组件的条目
在Sample.wixproj文件的下添加如下代码:
<ItemGroup>
<BootstrapperFile Include="Microsoft.Net.Framework.2.0">
<ProductName>.NET Framework 2.0</ProductName>
</BootstrapperFile>
</ItemGroup>
Include 特性用于表示应安装的必备组件的名称。ProductName 项元数据是可选的,它作为备用项供生成引擎在找不到包时用作用户友好名称。除非未指定 ApplicationFile,否则这些项不是必选 MSBuild 输入参数。对于必须为应用程序安装的每个必备组件,都应包含一个相应的项。
如果 BootstrapperItems 和 ApplicationFile 参数均未指定,则会导致生成错误。
步骤4:添加生成引导程序的任务
在Sample.wixproj文件中添加如下代码:
<Target Name="AfterBuild">ApplicationFile指定引导程序在所有必备组件安装完以后开始安装应用程序时使用的文件的路径;$(TargetFileName)是安装程序的名称,如果是制作中文安装包,wix安装工程默认生成的安装文件在输出目录下的zh-cn目录下,这里根据实际生成目录的结构填写不同的路径
<GenerateBootstrapper ApplicationFile="zh-cn/$(TargetFileName)"
ApplicationName="Foobar 1.0"
BootstrapperItems="@(BootstrapperFile)"
ComponentsLocation="Relative"
CopyComponents="True"
OutputPath="$(OutputPath)"
Path="E:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/" />
</Target>
HomeSite:指示必备组件由组件供应商托管。
Relative:指示必备组件与应用程序在同一个位置。
Absolute:指示所有组件都将在一个集中的 URL 下找到。该值应当与 ComponentsUrl 输入参数结合使用,ComponentsUrl 指定包含安装必备组件的 URL。
如果未指定 ComponentsLocation,将默认使用 HomeSite。
在General选项卡中输入生成安装文件的名称Name,选择要安装的文件Installer。
8、接着点击Package选项卡,选择.net Framework 2.0 和USBKey Driver
9、点击Build按钮,选择生成目录,确定后生成MSBuild项目,在输出目录下生成安装文件和引导程序如下:
10、运行setup.exe安装引导程序,会出现安装USBKey Driver组件的界面,如下:
这里制作的USBKey Driver必备程序并没有设置启动条件和检查,也就是说不管机器上有没装这个驱动,都会执行驱动安装程序,要设置启动条件和检查,可以在第5步中设置相关的属性,具体可参考bmg帮助文档