Burn bootstrapper is not detecting Windows installer version correctly

burn, wix, wix3.6

Solution

It's somewhat annoying that, unlike WiX, there's no way to easily test Burn InstallConditions - only DetectConditions are printed out in the log at runtime. After spending a while to test inverted InstallConditions as DetectConditions [*], this fragment appears to work for me:

<!-- Windows Installer 4.5 -->
<Fragment>
    <PackageGroup Id="WindowsInstaller45">
        <ExePackage
            Cache="no"
            Compressed="no"
            PerMachine="yes"
            Permanent="yes"
            Vital="yes"
            SourceFile="redist\WindowsXP-KB942288-v3-x86.exe"
            DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsXP-KB942288-v3-x86.exe"
            InstallCondition="VersionNT=v5.1 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
            InstallCommand="/quiet /norestart">
            <ExitCode Behavior="forceReboot"/>
        </ExePackage>
        <ExePackage
            Cache="no"
            Compressed="no"
            PerMachine="yes"
            Permanent="yes"
            Vital="yes"
            SourceFile="redist\WindowsServer2003-KB942288-v4-x86.exe"
            DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsServer2003-KB942288-v4-x86.exe"
            InstallCondition="VersionNT=v5.2 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
            InstallCommand="/quiet /norestart">
            <ExitCode Behavior="forceReboot"/>
        </ExePackage>
        <ExePackage
            Cache="no"
            Compressed="no"
            PerMachine="yes"
            Permanent="yes"
            Vital="yes"
            SourceFile="redist\WindowsServer2003-KB942288-v4-x64.exe"
            DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsServer2003-KB942288-v4-x64.exe"
            InstallCondition="VersionNT=v5.2 AND VersionNT64 AND VersionMsi &lt; v4.5"
            InstallCommand="/quiet /norestart">
            <ExitCode Behavior="forceReboot"/>
        </ExePackage>
        <MsuPackage
            Cache="no"
            Compressed="no"
            Permanent="yes"
            Vital="yes"
            KB="KB942288"
            SourceFile="redist\Windows6.0-KB942288-v2-x86.msu"
            DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x86.msu"
            InstallCondition="VersionNT=v6.0 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"/>
        <MsuPackage
            Cache="no"
            Compressed="no"
            Permanent="yes"
            Vital="yes"
            KB="KB942288"
            SourceFile="redist\Windows6.0-KB942288-v2-x64.msu"
            DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/Windows6.0-KB942288-v2-x64.msu"
            InstallCondition="VersionNT=v6.0 AND VersionNT64 AND VersionMsi &lt; v4.5"/>
    </PackageGroup>
</Fragment>

Problem

Currently, I have the following fragment to check and install Windows Installer 4.5 if the user is on Windows XP. ``` <Fragment> <Property Id="WinXPx86HasInstaller"> <![CDATA[VersionNT = 'v5.1' AND VersionMsi >= "4.5.6001.22159"]]> </Property> <PackageGroup Id="Windows.Installer.4.5"> <ExePackage Id="WinXp_x86" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/norestart /passive" SourceFile="WindowsXP-KB942288-v3-x86.exe" DownloadUrl="http://download.microsoft.com/download/2/6/1/261fca42-22c0-4f91-9451-0e0f2e08356d/WindowsXP-KB942288-v3-x86.exe" DetectCondition="WinXPx86HasInstaller" InstallCondition="NOT WinXPx86HasInstaller"> <ExitCode Behavior="forceReboot" /> </ExePackage> </PackageGroup> </Fragment> ``` However, this is not working and the property "WinXPx86HasInstaller" always evaluates to false even when it is installed. What am I doing wrong?

Original source