2
votes

My WiX Burn (v3.8.611.0) Bundle does mistakenly (?) NOT install it's PrereqPackage .NET Framework 3.5 SP1 when the system has .NET 3.5 installed. Instead it starts the Managed Bootstrapper Application (which needs at least .NET 3.5 SP1 in my case).

NetFx35 SP1 ExePackage installs correctly if a previous or none NetFx version is installed (tested with 3.0 SP2, 2.0 SP2 and no .NET Framework at all). But it does not if I'm installing over 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>

Please notice DetectCondition="1 > 2" and InstallCondition="2 > 1".

I tested on XP Pro x64 (SP2), XP Pro x86 (SP3) and Vista HP x86 (SP2), each at least once with NetFx 3.0 and NetFx 3.5 installed. I had the same behaviour with all tests.

Am I missing something? Is this a bug?

To clarify: I do not get any error message. The logfiles do not say anything suspicious. But my Managed Bootstrapper Application crashes because .NET Framework 3.5 SP1 is missing.

The logfile says:

Burn v3.8.611.0, Windows v5.2 (Build 3790: Service Pack 2), path: Z:\temp_install\Setup.exe, cmdline: ''

Setting string variable 'WixBundleLog' to value 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\20130823152241.log'

Setting string variable 'WixBundleOriginalSource' to value 'Z:\temp_install\Setup.exe'

Condition '((VersionNT >= v5.1) AND (ServicePackLevel >= 3)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR (VersionNT >= v6.0)' evaluates to true.

Setting string variable 'WixBundleName' to value 'MyBundle'

Loading managed bootstrapper application.

Creating BA thread to run asynchronously.

Detect begin, 5 packages

Setting string variable 'Netfx35Version' to value '3.5.21022.08'

Condition '1 > 2' evaluates to false.

Detected package: Netfx35SP1, state: Absent, cached: None

Detect complete, result: 0x0

1

1 Answers

1
votes

Wix 3.8 installs .Net 4.0 in the prereq when using a managed boostrapper application. This allows your .Net 4.0 MBA to run. It is up to you to deploy .Net 3.5 SP1 in your chain if your application needs it. Example is here (which works in my bundle): http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html