杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2956|回复: 0

WiX Toolset使用技巧——检查.NET Framework版本

[复制链接]
发表于 2017-4-8 13:59:53 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
当安装使用托管代码编写的应用时,在安装之前验证用户机器上是否已经安装必要的.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,你可以利用添加引用对话框添加扩展:

在Visual Studio打开 WiX项目
在解决方案管理器中右键项目,然后选择添加引用
选中WixNetFxExtension.dll程序集,然后点击添加
关闭添加引用对话框。
步骤2:将WixNetFxExtension的命名空间添加到项目中
在扩展添加到项目后,你需要将其命名空间添加到项目中,以便于你可以访问到相应的WiX元素。为此,修改项目中的顶层<WiX>元素,为其添加如下属性:
  1. xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
复制代码

具有标准命名空间以及WixNetFxExtension命名空间的完整Wix元素示例如下:
  1. <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
  2.     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
复制代码

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

步骤4:在条件中使用预定义属性
在引用属性后,可以在任何WiX条件语句中使用它。例如,以下内容设置了若未检测到.NET Framework 2.0已安装,则阻止程序继续安装:
  1. <Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
  2.     <![CDATA[Installed OR NETFRAMEWORK20]]>
  3. </Condition>
复制代码

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

要检查框架的Service Pack级别,需使用*_SP_LEVEL属性。以下内容设置了若机器上未安装.NET Framework 3.0 SP1,则阻止安装:
  1. <Condition Message="This application requires .NET Framework 3.0 SP1. Please install the .NET Framework then run this installer again.">
  2.     <![CDATA[Installed OR (NETFRAMEWORK30_SP_LEVEL and NOT NETFRAMEWORK30_SP_LEVEL = "#0")]]>
  3. </Condition>
复制代码

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-4-28 06:08 , Processed in 0.122746 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表