当系统安装了 .NET 3.5 时,我的 WiX Burn (v3.8.611.0) Bundle 错误地(?)不安装它的 PrereqPackage .NET Framework 3.5 SP1。相反,它会启动托管引导程序应用程序(在我的情况下至少需要 .NET 3.5 SP1)。
如果安装了以前的 NetFx 版本或没有安装 NetFx 版本(使用 3.0 SP2、2.0 SP2 和根本没有 .NET Framework 进行测试),则 NetFx35 SP1 ExePackage 安装正确。但如果我在 NetFx 3.5 上安装,则不会。
<Bundle>
...
<WixVariable Id="WixMbaPrereqPackageId" Value="Netfx35SP1" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" />
...
</Bundle>
<Fragment>
<PackageGroup Id="Netfx35SP1PackageGroup">
<ExePackage Id="Netfx35SP1"
DisplayName=".NET Framework 3.5 SP1"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
InstallCommand="/q /norestart"
SourceFile="$(var.NetFx35SetupFileName)"
DownloadUrl="$(var.NetFx35Setup)"
DetectCondition="1 > 2"
InstallCondition="2 > 1" />
</PackageGroup>
</Fragment>
请注意DetectCondition ="1 > 2" 和InstallCondition ="2 > 1"。
我在 XP Pro x64 (SP2)、XP Pro x86 (SP3) 和 Vista HP x86 (SP2) 上进行了测试,每个都安装了 NetFx 3.0 和 NetFx 3.5 至少一次。我在所有测试中都有相同的行为。
我错过了什么吗?这是一个错误吗?
澄清一下:我没有收到任何错误消息。日志文件没有说任何可疑的东西。但是我的托管引导程序应用程序崩溃了,因为缺少 .NET Framework 3.5 SP1。
日志文件说:
刻录 v3.8.611.0, Windows v5.2 (Build 3790: Service Pack 2), 路径: Z:\temp_install\Setup.exe, cmdline: ''
将字符串变量“WixBundleLog”设置为值“C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\20130823152241.log”
将字符串变量“WixBundleOriginalSource”设置为值“Z:\temp_install\Setup.exe”
条件 '((VersionNT >= v5.1) AND (ServicePackLevel >= 3)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR (VersionNT >= v6.0)' 计算结果为真.
将字符串变量“WixBundleName”设置为值“MyBundle”
加载托管引导程序应用程序。
创建 BA 线程以异步运行。
检测开始,5包
将字符串变量“Netfx35Version”设置为值“3.5.21022.08”
条件“1 > 2”评估为假。
检测到的包:Netfx35SP1,状态:不存在,缓存:无
检测完成,结果:0x0