[译]:WiX Toolset使用技巧——检查.NET Framework版本

标签: WiX Toolset, 官方教程, 中文翻译

博客分类: 官方教程

返回目录索引
原文地址:Check for .NET Framework Versions
译文地址:WiX Toolset使用技巧——检查.NET Framework版本

How To: Check for .NET Framework Versions

当安装使用托管代码编写的应用时,在安装之前验证用户机器上是否已经安装必要的.NET Framework版本通常是很有用的。WiX提供了一个WiX扩展(WixNetFxExtension)来检测.NET Framework版本。本节将介绍如何使用WixNetFxExtension来在安装时验证.NET Framework版本。至于如何在安装中安装.NET Framework的内容见:原文:How To: Install the .NET Framework Using Burn译文:WiX Toolset使用技巧——使用Burn引擎安装.NET Framework

步骤1:将WixNetFxExtension添加到项目中

在使用版本检测之前,你必须将WixNetFxExtension添加到项目中。如果你使用命令行处理Wix,则可以使用以下命令内容:

-ext WixNetFxExtension

如果你使用Visual Studio处理WiX,你可以利用添加引用对话框添加扩展:

  1. 在Visual Studio打开 WiX项目
  2. 在解决方案管理器中右键项目,然后选择添加引用
  3. 选中WixNetFxExtension.dll程序集,然后点击添加
  4. 关闭添加引用对话框。

步骤2:将WixNetFxExtension的命名空间添加到项目中

在扩展添加到项目后,你需要将其命名空间添加到项目中,以便于你可以访问到相应的WiX元素。为此,修改项目中的顶层<WiX>元素,为其添加如下属性:

xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"

具有标准命名空间以及WixNetFxExtension命名空间的完整Wix元素示例如下:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

步骤3:在项目中引用需要的属性

WixNetFxExtension中定义了.NET Framework的所有当前版本的属性,包括Service Pack级别。相关具体内容见:原文:WixNetfxExtension。要让你的安装程序使用这些属性,你还需要使用<PropertyRef>元素来引用它们。对于每个要使用的属性,将相应的PropertyRef添加到项目中。例如,如果你需要检测.NET Framework 2.0版本,可以添加如下内容:

<PropertyRef Id="NETFRAMEWORK20"/>

步骤4:在条件中使用预定义属性

在引用属性后,可以在任何WiX条件语句中使用它。例如,以下内容设置了若未检测到.NET Framework 2.0已安装,则阻止程序继续安装:

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>

其中Installed是Windows安装程序的一个属性,它确保只有在用户正在安装应用时进行检查,而不是修复或删除时。如果安装了.NET Framework 2.0,则NETFRAMEWORK20部分的条件满足。如果未检测到,安装程序将提示错误消息,然后中止安装过程。

要检查框架的Service Pack级别,需使用*_SP_LEVEL属性。以下内容设置了若机器上未安装.NET Framework 3.0 SP1,则阻止安装:

<Condition Message="This application requires .NET Framework 3.0 SP1. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR (NETFRAMEWORK30_SP_LEVEL and NOT NETFRAMEWORK30_SP_LEVEL = "#0")]]>
</Condition>

与前一个示例一样,只会在安装时检查,而在修复或删除时,不会检查。如果需要判断存在Service Pack 1,则将NETFRAMEWORK30_SP_LEVEL属性设置为#1。由于没有办法与前面带有#的值进行数字比较,所以,首先检查NETFRAMEWORK30_SP_LEVEL是否设置,然后在确定它是否设置为一个数字 —— 即先判断有没有,然后判断哪个版本。这可以正确表示是否安装了.NET 3.0的任何Service Pack版本。


译:奇葩史

没有评论