我将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 < v3.5.30729.1)
AND (NOT Netfx35x64FullVersion AND Netfx35x64FullVersion < v3.5.30729.1) AND NOT Netfx4FullVersion OR NOT Netfx4x64FullVersion " DetectCondition="(Netfx35FullVersion AND Netfx35FullVersion >= v3.5.30729.1) OR (Netfx35x64FullVersion AND Netfx35x64FullVersion >= 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>
答案 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,则可以使用“添加引用”对话框添加扩展名:
步骤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配置文件来解决这个问题。