在 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 项目结构

WiX-Bootstrapper - 为 UAC 对话框设置产品名称和公司名称

是否可以使用 wix bootstrapper 自动下载先决条件

自定义 Bootstrapper UI,类似于自定义的 wix UI

Wix Bootstrapper 清单或提升的自定义操作