在WIX Bootstrapper中检查.NET 4.0框架时遇到问题

时间:2014-06-17 18:37:16

标签: .net wix installer windows-installer wix-extension

我有一个安装Windows服务(MSI)和EXE的WIX引导程序应用程序。我一直试图检查.NET 4.0框架是否存在作为Windows服务安装程序的先决条件。如果框架不存在,我想停止安装程序,并将它们指向可以下载的位置。目前,无论框架是否存在,服务安装程序都会忽略该条件并尝试安装该服务。

此代码段位于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>

此片段来自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 个答案:

答案 0 :(得分:1)

您可以使用此页面中定义的WixNetfxExtension属性:WIXNETFXEXTENSION

例如,要检查是否安装了3.5 framework或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,则可以使用“添加引用”对话框添加扩展名:

  1. 在Visual Studio中打开您的WiX项目
    1. 在解决方案资源管理器中右键单击您的项目,然后选择添加引用...
    2. 从列表中选择WixNetFxExtension.dll程序集,然后单击添加
    3. 关闭“添加引用”对话框
  2. 步骤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:在条件

    中使用预定义的属性

    要检查框架的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>
    

    来源:How to check .Net framework versions