[wix-users] How do I make a 64 bit MSI?

J. Pablo Fernández pupeno at pupeno.com
Wed Apr 25 15:05:10 PDT 2018


I tried adding:

<?define bitness = "x64" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>

but it made no difference. I believe those are variables that are then used
in your wxs file, so, they don't make a different per-se.

On 25 April 2018 at 22:48, Philip Doragh via wix-users <
wix-users at lists.wixtoolset.org> wrote:

> I don't know about heat, but in my WXSes I have the following if...elseif
> clause to set the install directory to ProgramFiles64Folder if it is a
> 64bit build.
>
> <?if $(var.Platform) = x64 ?>
>   <?define bitness = "x64" ?>
>   <?define Win64 = "yes" ?>
>   <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
>   <?elseif $(var.Platform) = x86 ?>
>   <?define bitness = "x86" ?>
>   <?define Win64 = "no" ?>
>   <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
>   <?else ?>
>   <?error Unknown Platform/BuildType, needed for set Win64 variable
> definitions ?>
>   <?endif ?>
>
> Phil Doragh
>
>
> -----Original Message-----
> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf
> Of J. Pablo Fernández via wix-users
> Sent: Wednesday, April 25, 2018 3:57 PM
> To: wix-users at lists.wixtoolset.org
> Cc: J. Pablo Fernández
> Subject: [wix-users] How do I make a 64 bit MSI?
>
> I've specified:
>
> * `-arch x64` when running `candle.exe`.
> * `Platform=x64` on the `Package`.
> * `ProgramFiles64Folder` as the `Directory` id where things get installed.
>
> and still, when the app gets installed, it goes to `C:\Program Files
> (x86)`.
>
> There are some other `wxs` generated by `heat.exe`. I tried adding
> `-platform x64` and `-platform win64` to the calls to `heat.exe`, but it
> made no difference.
>
> I read
>
> - https://msdn.microsoft.com/en-us/library/gg513929.aspx
> - The section on 64 bit installer in the Wix Cookbook
> -
> https://stackoverflow.com/questions/4304253/how-do-i-
> get-wix-to-generate-a-64-bit-msi
>
> and I think I'm doing everything that was described there.
>
> What am I missing?
>
> I've came up with a minimum case that looks like this:
>
>     <?xml version="1.0" encoding="utf-8"?>
>     <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
>         <Product Id="*" Name="Project X" Manufacturer="X LLC"
> Language="1033" Version="1.0.0.0"
>                  UpgradeCode="5bf2131c-4068-4cb3-adac-bc9c79ed8ce3">
>             <Package InstallerVersion="301" Compressed="yes"
> InstallScope="perMachine" Platform="x64"/>
>             <Property Id="ApplicationFolderName" Value="Project X"/>
>             <Property Id="WixAppFolder" Value="WixPerMachineFolder"/>
>             <UI>
>                 <UIRef Id="WixUI_Advanced"/>
>             </UI>
>         </Product>
>     </Wix>
>
> and I compile it like this:
>
>      candle.exe -arch x64 -ext WixUIExtension -ext WixUtilExtension
> ProjectX.wxs
>
>      light.exe -ext WixUIExtension -ext WixUtilExtension -out
> ProjectX-1.0.0-beta.3-win64.msi ProjectX.wixobj
>
> It obviously complaints about the media table being empty:
>
>     > candle.exe -arch x64 -ext WixUIExtension -ext WixUtilExtension
> ProjectX.wxs
>     Windows Installer XML Toolset Compiler version 3.11.0.1701
>     Copyright (c) .NET Foundation and contributors. All rights reserved.
>
>     ProjectX.wxs
>
>     > light.exe -ext WixUIExtension -ext WixUtilExtension -out
> ProjectX-1.0.0-beta.3-win64.msi ProjectX.wixobj
>     Windows Installer XML Toolset Linker version 3.11.0.1701
>     Copyright (c) .NET Foundation and contributors. All rights reserved.
>
>
> C:\Users\pupeno\AppData\Local\Temp\h1k0echv\ProjectX-1.0.0-
> beta.3-win64.msi
> : warning LGHT1076 : ICE71: The Media table has no entries.
>
> The full `.wxs` looks like this:
>
>     <?xml version="1.0" encoding="utf-8"?>
>     <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
>          xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
>         <Product Id="*" Name="ProjectX" Manufacturer="X Inc"
> Language="1033"
>                  Version="$(var.MSIProductVersion)" UpgradeCode="">
>             <Package InstallerVersion="301" Compressed="yes"
> InstallScope="perMachine" Platform="x64"/>
>
>             <MediaTemplate EmbedCab="yes"/>
>
>             <Icon Id="Icon_ProjectX.ico"
> SourceFile="src\main\installer\ProjectX.ico"/>
>
>             <WixVariable Id="WixUISupportPerUser" Value="0"/>
>             <Property Id="ApplicationFolderName" Value="X Inc\ProjectX"/>
>             <Property Id="WixAppFolder" Value="WixPerMachineFolder"/>
>             <Property Id="ARPPRODUCTICON" Value="Icon_ProjectX.ico"/>
>             <WixVariable Id="WixUILicenseRtf"
> Value="src\main\installer\eula.rtf"/>
>             <WixVariable Id="WixUIBannerBmp"
> Value="src\main\installer\WixUIBannerBmp.bmp"/>
>             <WixVariable Id="WixUIDialogBmp"
> Value="src\main\installer\WixUIDialogBmp.bmp"/>
>             <Property Id="AUTO_CONNECT_TO">
>                 <RegistrySearch Id="AutoConnectTo" Root="HKLM"
> Key="Software\X Inc\ProjectX" Name="AutoConnectTo"
>                                 Type="raw"/>
>             </Property>
>             <Property Id="RUN_ProjectX_ON_EXIT" Value="true"/>
>             <Property Id="INSTALL_SCREENSAVER_ON_EXIT" Value="true"/>
>             <Property Id="STAGING_DIR" Value="undefined"/>
>             <Property Id="ARCH" Value="undefined"/>
>
>             <UI>
>                 <UIRef Id="DM_WixUI_Advanced"/>
>
>                 <Publish Dialog="DM_ExitDialog" Control="Finish"
> Event="DoAction" Value="CA_Run_ProjectX">
>                     RUN_ProjectX_ON_EXIT and <![CDATA[&Ftr_Configurator=3]]>
> and NOT Installed
>                 </Publish>
>
>                 <Publish Dialog="DM_ExitDialog" Control="Finish"
> Event="DoAction" Value="CA_Install_Screensaver">
>                     INSTALL_SCREENSAVER_ON_EXIT and
> <![CDATA[&Ftr_Screensaver=3]]> and NOT Installed
>                 </Publish>
>
>                 <Dialog Id="DM_ExitDialog" Width="370" Height="270"
> Title="!(loc.ExitDialog_Title)">
>                     <Control Id="Finish" Type="PushButton" X="236" Y="243"
> Width="56" Height="17" Default="yes" Cancel="yes"
>                              Text="!(loc.WixUIFinish)"/>
>                     <Control Id="Cancel" Type="PushButton" X="304" Y="243"
> Width="56" Height="17" Disabled="yes"
>                              Text="!(loc.WixUICancel)"/>
>                     <Control Id="Bitmap" Type="Bitmap" X="0" Y="0"
> Width="370" Height="234" TabSkip="no"
>                              Text="!(loc.ExitDialogBitmap)"/>
>                     <Control Id="Back" Type="PushButton" X="180" Y="243"
> Width="56" Height="17" Disabled="yes"
>                              Text="!(loc.WixUIBack)"/>
>                     <Control Id="BottomLine" Type="Line" X="0" Y="234"
> Width="370" Height="0"/>
>                     <Control Id="Description" Type="Text" X="135" Y="70"
> Width="220" Height="40" Transparent="yes"
>                              NoPrefix="yes"
>                              Text="Thank you for choosing ProjectX. We
> sincerely hope it satisfies your needs."/>
>                     <Control Id="Title" Type="Text" X="135" Y="20"
> Width="220" Height="60" Transparent="yes" NoPrefix="yes"
>                              Text="!(loc.ExitDialogTitle)"/>
>                     <Control Id="RunProjectXCheckBox" Type="CheckBox"
> X="135" Y="150" Width="220" Height="40" Hidden="yes"
>                              Property="RUN_ProjectX_ON_EXIT"
> CheckBoxValue="1" Text="Run ProjectX Configurator">
>                         <Condition
> Action="show"><![CDATA[&Ftr_Configurator=3]]></Condition>
>                     </Control>
>                     <Control Id="InstallScreensaverCheckBox"
> Type="CheckBox" X="135" Y="190" Width="220" Height="40"
>                              Hidden="yes"
> Property="INSTALL_SCREENSAVER_ON_EXIT" CheckBoxValue="1"
>                              Text="Install ProjectX as your screensaver">
>                         <Condition
> Action="show"><![CDATA[&Ftr_Screensaver=3]]></Condition>
>                     </Control>
>                 </Dialog>
>
>                 <InstallUISequence>
>                     <Show Dialog="DM_ExitDialog" OnExit="success"
> Overridable="yes"/>
>                 </InstallUISequence>
>
>                 <AdminUISequence>
>                     <Show Dialog="DM_ExitDialog" OnExit="success"
> Overridable="yes"/>
>                 </AdminUISequence>
>             </UI>
>
>             <MajorUpgrade DowngradeErrorMessage="A newer version of
> [ProductName] is already installed."/>
>
>             <Directory Id="TARGETDIR" Name="SourceDir">
>                 <Directory Id="ProgramFiles64Folder">
>                     <Directory Id="APPLICATIONFOLDER">
>                         <Directory Id="Dir_jre" Name="jre"/>
>                         <Directory Id="Dir_jars" Name="jars"/>
>                     </Directory>
>                 </Directory>
>
>                 <Directory Id="ProgramMenuFolder">
>                     <Directory Id="Dir_Menu_ProjectX" Name="ProjectX"/>
>                 </Directory>
>
>                 <Component Id="Cmp_Auto_Connect_to" Win64="yes">
>                     <RegistryValue Root="HKLM" Key="Software\X
> Inc\ProjectX" Name="AutoConnectTo" Type="string"
>                                    Value="[AUTO_CONNECT_TO]"/>
>                 </Component>
>
>                 <Directory Id="SystemFolder"/>
>             </Directory>
>
>             <DirectoryRef Id="APPLICATIONFOLDER">
>                 <Component Id="Cmp_ProjectX_Configurator_exe" Guid=""
> Win64="yes">
>                     <File Id="File_FT_D_ProjectX_Configurator_exe"
>                           Source="$(var.STAGING_DIR)\ProjectX
> Configurator.exe" KeyPath="yes">
>                         <Shortcut Id="Shrt_ProjectX_Configurator"
> Name="ProjectX Configurator" Directory="Dir_Menu_ProjectX"
>                                   Advertise="yes"
> Icon="Icon_ProjectX.ico"/>
>                     </File>
>                     <RemoveFolder Id="Rm_Menu_ProjectX_1"
> Directory="Dir_Menu_ProjectX" On="uninstall"/>
>                 </Component>
>                 <Component Id="Cmp_ProjectX_Displayer_exe" Guid=""
> Win64="yes">
>                     <File Id="File_FT_D_ProjectX_Displayer_exe"
> Source="$(var.STAGING_DIR)\ProjectX Displayer.exe"
>                           KeyPath="yes">
>                         <Shortcut Id="Shrt_ProjectX_Displayer"
> Name="ProjectX Displayer" Directory="Dir_Menu_ProjectX"
>                                   Advertise="yes"
> Icon="Icon_ProjectX.ico"/>
>                     </File>
>                     <RemoveFolder Id="Rm_Menu_ProjectX_2"
> Directory="Dir_Menu_ProjectX" On="uninstall"/>
>                 </Component>
>                 <Component Id="Cmp_ProjectX_Renderer_exe" Guid=""
> Win64="yes">
>                     <File Id="File_FT_D_ProjectX_Renderer_exe"
> Source="$(var.STAGING_DIR)\ProjectX Renderer.exe"
>                           KeyPath="yes">
>                         <Shortcut Id="Shrt_ProjectX_Renderer"
> Name="ProjectX Renderer" Directory="Dir_Menu_ProjectX"
>                                   Advertise="yes"
> Icon="Icon_ProjectX.ico"/>
>                     </File>
>                     <RemoveFolder Id="Rm_Menu_ProjectX_3"
> Directory="Dir_Menu_ProjectX" On="uninstall"/>
>                 </Component>
>                 <Component Id="Cmp_Prosaver_scr" Guid="" Win64="yes">
>                     <File Id="File_FT_D_Prosaver_scr"
> Source="$(var.STAGING_DIR)\Prosaver.scr" KeyPath="yes"/>
>                 </Component>
>                 <Component Id="Cmp_Icon" Guid="" Win64="yes">
>                     <File Id="File_Icon"
> Source="src\main\installer\ProjectX.ico" KeyPath="yes"/>
>                 </Component>
>             </DirectoryRef>
>
>             <DirectoryRef Id="Dir_Menu_ProjectX">
>                 <Component Id="Cmp_Install_Screensaver" Guid=""
> Win64="yes">
>                     <Shortcut Id="Shrt_Install_Screensaver" Name="Install
> ProjectX Screensaver"
>                               WorkingDirectory="SystemFolder"
> Icon="Icon_ProjectX.ico"
>                               Target="[SystemFolder]rundll32.exe"
>                               Arguments="desk.cpl,InstallScreenSaver
> [#File_FT_D_Prosaver_scr]"/>
>                     <RemoveFolder Id="Rm_Menu_ProjectX_4" On="uninstall"/>
>                     <RegistryValue Root="HKCU" Key="Software\X
> Inc\ProjectX" Name="installed" Type="integer"
>                                    Value="1" KeyPath="yes"/>
>                 </Component>
>                 <Component Id="Cmp_ProjectX_Support" Guid="" Win64="yes">
>                     <util:InternetShortcut Id="IShrt_ProjectX_Support"
> Name="ProjectX Support" IconFile="[#File_Icon]"
>                                            Target="
> https://support.ProjectX.tech"/>
>                     <RemoveFolder Id="Rm_Menu_ProjectX_5" On="uninstall"/>
>                     <RegistryValue Root="HKCU" Key="Software\X
> Inc\ProjectX" Name="installed" Type="integer"
>                                    Value="1" KeyPath="yes"/>
>                 </Component>
>             </DirectoryRef>
>
>             <CustomAction Id="CA_Run_ProjectX"
> Directory="APPLICATIONFOLDER" Return="asyncNoWait"
>
> ExeCommand="[#File_FT_D_ProjectX_Configurator_exe]"/>
>             <CustomAction Id="CA_Install_Screensaver"
> Directory="SystemFolder" Return="asyncNoWait"
>                           ExeCommand="[SystemFolder]rundll32.exe
> desk.cpl,InstallScreenSaver [#File_FT_D_Prosaver_scr]"/>
>
>             <Feature Id="ProductFeature" Title="ProjectX" Level="1"
> Display="expand"
>                      Description="ProjectX.">
>                 <ComponentGroupRef Id="ComGrp_JRE"/>
>                 <ComponentGroupRef Id="ComGrp_JARS"/>
>                 <ComponentRef Id="Cmp_Auto_Connect_to"/>
>                 <ComponentRef Id="Cmp_ProjectX_Support"/>
>                 <ComponentRef Id="Cmp_Icon"/>
>
>                 <Feature Id="Ftr_Configurator" Title="Configurator"
> Level="1"
>                          Description="This is the application you use to
> register a new account as well as configure what websites are displayed,
> what displayers and renderers have access, etc. You need this in at least
> one computer to control your account.">
>                     <ComponentRef Id="Cmp_ProjectX_Configurator_exe"/>
>                 </Feature>
>                 <Feature Id="Ftr_Displayer" Title="Displayer" Level="1"
>                          Description="This is what displays web sites. You
> need this (or the screensaver) on all the computers connected to screens
> that displays web sites.">
>                     <ComponentRef Id="Cmp_ProjectX_Displayer_exe"/>
>                 </Feature>
>                 <Feature Id="Ftr_Renderer" Title="Renderer" Level="1"
>                          Description="This accesses your websites and
> generates the screenshots for the displayers. You need at least one of
> these although the Configurator can also act as a Renderer.">
>                     <ComponentRef Id="Cmp_ProjectX_Renderer_exe"/>
>                 </Feature>
>                 <Feature Id="Ftr_Screensaver" Title="Screensaver" Level="1"
>                          Description="This is what displays web sites as
> the screensaver. You need this (or the displayer) on all the computers
> connected to screens that displays web sites.">
>                     <ComponentRef Id="Cmp_Prosaver_scr"/>
>                     <ComponentRef Id="Cmp_Install_Screensaver"/>
>                 </Feature>
>             </Feature>
>         </Product>
>     </Wix>
>
> --
> J. Pablo Fernández <pupeno at pupeno.com> (http://pupeno.com)
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/
>
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant
> http://www.firegiant.com/




-- 
J. Pablo Fernández <pupeno at pupeno.com> (http://pupeno.com)


More information about the wix-users mailing list