在 WIX Bootstrapper 中检查 .NET 4.0 框架时遇到问题
Posted
技术标签:
【中文标题】在 WIX Bootstrapper 中检查 .NET 4.0 框架时遇到问题【英文标题】:Trouble checking for .NET 4.0 framework in WIX Bootstrapper 【发布时间】:2014-06-17 18:37:15 【问题描述】:我有一个安装 Windows 服务 (MSI) 和 EXE 的 WIX 引导程序应用程序。我一直在尝试检查是否存在 .NET 4.0 框架作为 Windows 服务安装程序的先决条件。如果框架不存在,我想停止安装程序并将它们指向可以下载它的位置。目前,服务安装程序会忽略该条件并尝试安装服务,无论框架是否存在。
这个sn-p在windows服务安装器中:
<Product Id="*" Name="TestService" Language="1033" Version="1.0.0.1" Manufacturer="xxxxxx" UpgradeCode="<xxxxxxxx">
<PropertyRef Id="NETFRAMEWORK40FULL" />
<Condition Message="You need to have the .NET 4.0 Framework installed">
<![CDATA[Installed OR NETFRAMEWORK40FULL]]>
</Condition>
</Product>
这个 sn-p 来自 Bootstrapper:
<Bundle Name="BundledInstall" Version="1.0.0.0"
UpgradeCode="xxxxxx">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication
LicenseFile="xxxxxxxx"
LogoFile="xxxxxxxx"
/>
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="MyPackage" />
<PackageGroupRef Id="ServicePackage" />
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="ServicePackage">
<MsiPackage
SourceFile="C:\Users\Max\dev\wix\pappBootstrapper\sebService.msi" Cache="no" ForcePerMachine="yes">
</MsiPackage>
</PackageGroup>
</Fragment>
感谢您的帮助。
【问题讨论】:
【参考方案1】:您可以使用此页面中定义的 WixNetfxExtension 属性:WIXNETFXEXTENSION
例如,要检查是否安装了 3.5 框架或 3.5 SP,您可以使用以下属性。
NETFRAMEWORK35 - Set to #1 if the .NET Framework 3.5 is installed (not set otherwise).
NETFRAMEWORK35_SP_LEVEL - Indicates the service pack level for the .NET Framework 3.5.
要在您的项目中使用这些属性,请按照以下步骤操作:
步骤 1. 将 WiX .NET 扩展库添加到您的项目中 如果您在 Visual Studio 中使用 WiX,则可以使用“添加引用”对话框添加扩展:
-
在 Visual Studio 中打开您的 WiX 项目
-
在解决方案资源管理器中右键单击您的项目并选择添加引用...
从列表中选择 WixNetFxExtension.dll 程序集并单击添加
关闭“添加参考”对话框
第 2 步:将 WiX .NET 扩展命名空间添加到您的项目中
将库添加到您的项目后,您需要将 .NET 扩展命名空间添加到您的项目中,以便您可以访问适当的 WiX 元素。为此,通过添加以下属性来修改项目中的***元素:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
第 3 步:在项目中引用所需的属性
<PropertyRef Id="NETFRAMEWORK20"/>
第 4 步:在条件中使用预定义的属性
要检查框架的服务包级别,请使用 *_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>
来源:How to check .Net framework versions
【讨论】:
除非我弄错了,否则此解决方案仅适用于产品,而不适用于捆绑包(引导程序,因为您不能在捆绑包中使用 PropertyRef 在我看来,Cocowalla 说的是真的。 @MattLock 你成功了吗?我正在尝试使用 WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED 但作为一个条件,但无论如何它总是返回 false。以上是关于在 WIX Bootstrapper 中检查 .NET 4.0 框架时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Window 安装程序 XML 中使用 Bootstrapper 制作单个 Bundle 项目
WiX-Bootstrapper - 为 UAC 对话框设置产品名称和公司名称
是否可以使用 wix bootstrapper 自动下载先决条件