使用wix bundle进行.NET Framework 3.5 SP1先决条件安装

时间:2014-03-11 10:30:46

标签: wix bootstrapper

我将WIX 3.8用于我的应用程序,它需要安装.NET Framework 3.5 SP1作为计算机的先决条件。

我检查了bundle.wxs中的.net Framework,当执行时,我面临以下问题。
1.即使配置文件中定义的受支持的运行时版本是v3.5,引导程序也总是尝试安装.net框架。
2.在接受并继续安装时,boostrapper无法加载,设置中断。

从日志文件中,我看到在已安装.net 3.5 SP1的计算机上测试时,检测条件的条件成功。但它退出时会显示以下消息:“已经安装了先决条件。将不会重新加载引导程序应用程序以防止无限循环。

任何人都可以告诉我为什么BootStrapper总是会触发.net框架,即使已经安装在机器上了?

附加.net检查的代码片段以及配置文件更改:

<PackageGroup Id="Netfx35Full" >
<ExePackage Id="Netfx35Full" DisplayName="Microsoft .NET Framework 3.5"                Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="no"                     SourceFile='..\prereq\dotnetfx35setup.exe' InstallCommand='/q /norestart'
RepairCommand="/q /norestart" UninstallCommand="/q /norestart"                    InstallCondition="(NOT Netfx35FullVersion AND Netfx35FullVersion &lt; v3.5.30729.1) 
AND (NOT Netfx35x64FullVersion AND Netfx35x64FullVersion &lt; v3.5.30729.1) AND NOT   Netfx4FullVersion OR NOT Netfx4x64FullVersion " DetectCondition="(Netfx35FullVersion AND   Netfx35FullVersion &gt;= v3.5.30729.1) OR (Netfx35x64FullVersion AND Netfx35x64FullVersion   &gt;=  v3.5.30729.1) OR Netfx4FullVersion OR Netfx4x64FullVersion"/>
</PackageGroup>

配置文件

 <startup useLegacyV2RuntimeActivationPolicy="true">
 <supportedRuntime version="v3.5" />
 </startup>
 <wix.bootstrapper>
 <host assemblyName="SCM.BootstrapperApplication">
 <supportedFramework version="v3.5" />
 </host>
 </wix.bootstrapper>

2 个答案:

答案 0 :(得分:1)

您如何使用“Netfx35FullVersion”/“Netfx35x64FullVersion”等属性?你自己定义了吗?

您可以使用此页面中定义的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.

要在项目中使用这些属性,请按照以下步骤操作: 资料来源:How to check .Net framework versions

步骤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>
    

答案 1 :(得分:0)

当您有要安装的prereq .net软件包时,有时会在日志中收到此消息,并且在BootstrapperCore配置文件中,您提供了statup属性,该属性的计算结果为false。 我建议你可以重新访问BootstrapperCore配置文件来解决这个问题。