WiX: Comment remplacer "C: \ Program Files (x86)" sur une machine x64 dans la séquence WixUI_Advanced?

Je suis en utilisant WixUI_Advanced séquence pour permettre aux utilisateurs de sélectionner par ordinateur ou par utilisateur d'installation et de modifier le dossier de destination. Mon WiX projet vise à produire à la fois x86 et x64 Msi (je suis en utilisant WiX trucs et Astuces recommandations). Je garde aussi à l'application dossier d'installation dans le registre pour les mises à jour majeures (j'utilise APPLICATIONFOLDER propriété et le répertoire ID -- au lieu de INSTALLLOCATION -- par WixUI_Advanced exigences).

Il y a un bug dans WixUI_Advanced séquence qui provoque le Dossier de Destination boîte de dialogue pour afficher le dossier app sous C:\Program Files (x86) au lieu de C:\Program Fichiers lors de l'exécution sur une machine 64 bits, même lorsque le code définit correctement dossier app pour ProgramFiles64Folder de la propriété. Le bug tracker commentaire suggère d'utiliser les SetDirectory élément pour définir la valeur de APPLICATIONFOLDER, mais il est pas d'exemple expliquant comment faire. Quand j'ai essayé, il n'a point fait aucune différence (j'ai aussi trouvé un certain nombre de postes de recommander à l'aide d'une action personnalisée pour définir APPLICATIONFOLDER, mais aucun n'a fonctionné pour moi). Personne ne sait comment faire WixUI_Advanced affichage de séquence correcte 'Program Files' dossier sur un système 64 bits (et aussi de montrer à l'origine de la dossier sélectionné lors d'importantes mises à niveau)?

Si ça aide, je vais fournir des échantillons de WXS des fragments, mais ils ont assez bien suivre les recommandations de la StackOverflow est WiX trucs et Astuces post. Aussi, mon 64 bits MSI est bien un 64 bits (j'ai le forfait et les composants marqués comme "x64"; et il ne marche pas sur les plates-formes 32 bits). Je suis l'aide de WiX 3.6 et Visual Studio 2010.

EXEMPLE DE CODE:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<Product 
    Id="81955f17-31f3-4e51-8294-372f96141c00" 
    Name="WiX64BitDemo" 
    Language="1033" 
    Version="1.0.0.0" 
    Manufacturer="Test" 
    UpgradeCode="5bed9777-bea6-4dc3-91d7-5dd93819563a">

<Package 
    InstallerVersion="300" 
    Compressed="yes"
    InstallScope="perMachine"
    Platform="x64" />

<MajorUpgrade 
    AllowSameVersionUpgrades="no"
    DowngradeErrorMessage="Can't downgrade."
    Schedule="afterInstallInitialize" />

<Media 
    Id="1" 
    Cabinet="media1.cab" 
    EmbedCab="yes" />

<Property Id="APPLICATIONFOLDER" Secure="yes">
    <RegistrySearch Id="FindInstallLocation"
        Root="HKLM"
        Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[WIX_UPGRADE_DETECTED]"
        Name="InstallLocation"
        Type="raw"
        Win64="yes" />
</Property>

<Property Id="ApplicationFolderName" Value="WiX64BitDemo" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />

<SetDirectory 
    Id="APPLICATIONFOLDER" 
    Value="[ProgramFiles64Folder][ApplicationFolderName]">APPLICATIONFOLDER=""</SetDirectory>

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFiles64Folder">
        <Directory Id="APPLICATIONFOLDER" Name="WiX64BitDemo">
            <Component 
                Id="ReadmeComponent" 
                Guid="*" 
                Win64="yes">

                <File
                    Id="ReadmeFile"
                    Name="readme.txt"
                    Source="$(var.ProjectDir)readme.txt"
                    KeyPath="yes"/>
            </Component>
        </Directory>
    </Directory>
</Directory>

<Feature Id="ProductFeature" Title="WiX64BitDemo" Level="1">
    <ComponentRef Id="ReadmeComponent" />
</Feature>

<UI Id="UISequence">
    <UIRef Id="WixUI_Advanced"/>
</UI>

</Product>
</Wix>

Merci beaucoup pour Sascha Beaumont pour la résolution de ce problème. Ici, c'est le travail de l'échantillon:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product
Id="81955f17-31f3-4e51-8294-372f96141c00"
Name="WiX64BitDemo" 
Language="1033" 
Version="1.0.0.0" 
Manufacturer="Test" 
UpgradeCode="5bed9777-bea6-4dc3-91d7-5dd93819563a">
<Package 
InstallerVersion="300" 
Compressed="yes"
InstallScope="perMachine"
Platform="x64" />
<MajorUpgrade 
AllowSameVersionUpgrades="no"
DowngradeErrorMessage="Can't downgrade."
Schedule="afterInstallInitialize" />
<Media 
Id="1" 
Cabinet="media1.cab" 
EmbedCab="yes" />
<Property Id="APPLICATIONFOLDER" Secure="yes">
<RegistrySearch Id="FindInstallLocation"
Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[WIX_UPGRADE_DETECTED]"
Name="InstallLocation"
Type="raw"
Win64="yes" />
</Property>
<Property Id="ApplicationFolderName" Value="WiX64BitDemo" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
<SetDirectory 
Id="APPLICATIONFOLDER" 
Value="[ProgramFiles64Folder][ApplicationFolderName]">APPLICATIONFOLDER=""</SetDirectory>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="APPLICATIONFOLDER" Name="WiX64BitDemo">
<Component 
Id="ReadmeComponent" 
Guid="*" 
Win64="yes">
<File
Id="ReadmeFile"
Name="readme.txt"
Source="$(var.ProjectDir)readme.txt"
KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="ProductFeature" Title="WiX64BitDemo" Level="1">
<ComponentRef Id="ReadmeComponent" />
</Feature>
<UI Id="UISequence">
<UIRef Id="WixUI_Advanced"/>
</UI>
<CustomAction
Id="OverwriteWixSetDefaultPerMachineFolder"
Property="WixPerMachineFolder"
Value="[APPLICATIONFOLDER]"
Execute="immediate"
/>
<CustomAction 
Id="SetARPINSTALLLOCATION" 
Property="ARPINSTALLLOCATION" 
Value="[APPLICATIONFOLDER]"  
/>
<InstallUISequence>
<Custom Action="OverwriteWixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" />
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="OverwriteWixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" />
<Custom Action="SetARPINSTALLLOCATION" After="InstallValidate"/>
</InstallExecuteSequence>
</Product>
</Wix>

source d'informationauteur Alek Davis