estoy usando WixUI_Advanced secuencia para permitir a los usuarios elegir carpeta de destino por equipo o por usuario de instalación y cambio. Mi proyecto WiX está destinado a producir x86 y x64 MSI (estoy usando WiX Tips and Tricks recomendaciones). También guardo la aplicación carpeta de instalación en el registro para las principales actualizaciones (utilizo la propiedad APPLICATIONFOLDER y el ID del directorio, en lugar de INSTALLLOCATION, según los requisitos de WixUI_Advanced).WiX: ¿Cómo anular "C: Archivos de programa (x86)" en la máquina x64 en secuencia WixUI_Advanced?
Hay una bug in WixUI_Advanced sequence que hace que el diálogo Carpeta de destino para mostrar la carpeta de aplicaciones bajo C: \ Archivos de programa (x86) en lugar de C: \ Archivos de programa cuando se ejecuta en una máquina de 64 bits, incluso cuando el código establece correctamente la carpeta de la aplicación en la propiedad ProgramFiles64Folder. El comentario del rastreador de errores sugiere usar el elemento SetDirectory para establecer el valor de APPLICATIONFOLDER, pero hay sin ejemplo que explica cómo hacerlo. Cuando lo intenté, sí marcó la diferencia (también encontré una cantidad de publicaciones recomendando el uso de una acción personalizada para establecer APLICACIÓN DE CARPETA, pero ninguna me funcionó). ¿Alguien sabe cómo hacer que la secuencia WixUI_Advanced muestre la carpeta correcta de "Archivos de programa" en un sistema de 64 bits (y también muestre la carpeta originalmente seleccionada durante las principales actualizaciones)?
Si ayuda, voy a ofrecer fragmentos de muestra WXS, pero más o menos siguen las recomendaciones de WiX Tips and Tricks puesto de stackoverflow. Además, mi paquete MSI de 64 bits es realmente un paquete de 64 bits (tengo el paquete y los componentes marcados como 'x64' y no se ejecuta en plataformas de 32 bits). Estoy usando WiX 3.6 y Visual Studio 2010 .
CÓDIGO dE mUESTRA:
<?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>
Muchas gracias a Sascha Beaumont para la solución de este problema aquí es la muestra de trabajo:.
<?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>
Gracias Sascha, pero parece que no funciona. Actualicé la publicación para incluir el ejemplo completo del archivo WXS (instala un solo archivo Readme.txt ubicado en la carpeta del proyecto). Cuando lo ejecuto en un servidor de Windows 2008 de 64 bits, el cuadro de diálogo Carpeta de destino aún apunta a la carpeta Archivos de programa (x86). ¿Hay algo mal con el código? –
Hola Alek, mira la publicación actualizada - esto estuvo bien para mí en Win7 x64 en una prueba de humo de 5 minutos :) – saschabeaumont
¡¡¡Dulce !!! Parece que está funcionando. Muchas gracias, Sascha! –