One approach to this that I have seen work is where you have one .wxs file that generates both a 32-bit and a 64-bit .msi through conditional logic. You then wrap both the 32-bit and 64-bit .msi in a bootstrapper that determines the correct .msi to install at runtime. The bootstrapper can be pretty simple, with no UI that does nothing other than determine the OS and launch the correct .msi. While not perfect, this allows you to only have to manage one set of .wxs files to generate two almost identical installations, targeting two different platforms.
To generate two installers, one 32-bit and one 64-bit from a single .wxs file, you would do something like this... <?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <?ifndef X64 ?> <?define var.win64=no ?> <?define var.PLATFORM="x86" ?> <?define var.PROGRAMFILESFOLDER="ProgramFilesFolder" ?> <?else ?> <?define var.win64=yes ?> <?define var.PLATFORM="x64" ?> <?define var.PROGRAMFILESFOLDER="ProgramFiles64Folder" ?> <?endif ?> <Product Id="{GUID}" Language="1033" Manufacturer="you" Name="product name" UpgradeCode="{GUID}" Version="version"> <Package Comments="" Description="description" InstallerVersion="200" Keywords="Installer,MSI,Database" Languages="0,1033" Manufacturer="you" Platform="$(var.PLATFORM)" SummaryCodepage="0" Compressed="yes" /> <Component Id="Component" Guid="{GUID}" Win64="$(var.win64)"> <File Id="file" Name="youfile" KeyPath="yes" /> </Component> -----Original Message----- From: Michael Owings [mailto:[EMAIL PROTECTED] Sent: Tuesday, October 28, 2008 8:32 AM To: Pally Sandher Cc: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Question regarding the attribute "Win64" in"Component" A mixed install will *always* be unavoidable for us. Some of our components are plugins for other applications -- which may themselves be 32-bit or 64-bit (even on a 64-bit platform, a 32-bit app could be in use, or a particular app may ONLY be 32-bit), which requires the plugins built for the appropriate architecture. We don't know what's installed where until runtime. We actually determine the correct place to drop the plugins via custom actions sequenced prior to LaunchConditions. The plugin install paths could be anywhere -- very possibly (and not uncommonly) NOT under ProgramFiles64Folder or even ProgramFilesFolder. In fact, we really for the most part don't care about the values of these properties and don't use them, as we have to determine component locations via custom actions, always. There is a single exception to this rule -- a 32-bit app, but the MSI always does the right thing with this (we use ProgramFilesFolder, and it drops it into the correct place) However, I might be concerned if our *own* location properties were bing transformed somehow. In other words, If I set a property to C:\Program Files\foo on a 64-bit machine and I get redirected to c:\Program Files (x86)\foo on the component install I might be concerned -- but I haven't seen evidence of this (yet -- I have a lot more 64-bit testing to do). Nothing is dropped into System32 in all cases. Having said all that -- I'm not averse to building a 64-bit installer, but (per another email) 64-bit MSIs with WIX 2.x don't seem to work for me: I've noticed that my MSI will not run on a Vista-64 box if I add the Platforms="x64" attribute. The error is something to the effect of : "This installation package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer package." Should my custom actions dll be built 64-bit? The MSI can be opened with Orca and examined without issues. Any help on *that* issue would be appreciated, as I do have an upcoming install where I really will need a 64-bit MSI. Pally Sandher wrote: > If your MSI is built for x86 (i.e. Platform = "Intel") try as you may, > you will *not* be able to access the 64-bit system directories > ProgramFiles64Folder, System64Folder or CommonFiles64Folder. You may get > an MSI to build & even look as though it installs but it won't ever > access these areas. When (if) you check the log you'll see properties > being transformed by something called WIN64DUALFOLDERS from the 64-bit > directory to the corresponding 32-bit directory. > > You can however build a x64 MSI which can access both 64-bit & 32-bit > system directories which WIN64DUALFOLDERS won't touch but as stated > before you will get ICE80 errors for every 32-bit directory you > reference. > > Why does your application have 32-bit & 64-bit components? > > > Palbinder Sandher > Software Deployment and IT Administrator > > T: +44 (0) 141 945 8500 > F: +44 (0) 141 945 8501 > http://www.iesve.com > > **Design, Simulate + Innovate with the <Virtual Environment>** > > Integrated Environmental Solutions Limited. Registered in Scotland No. > SC151456 > Registered Office - Helix Building, West Of Scotland Science Park, > Glasgow G20 0SP > > Email Disclaimer > > > > -----Original Message----- > From: Christopher Karper [mailto:[EMAIL PROTECTED] > Sent: 28 October 2008 14:28 > To: [EMAIL PROTECTED] > Cc: General discussion for Windows Installer XML toolset. > Subject: Re: [WiX-users] Question regarding the attribute "Win64" > in"Component" > > MSI doesn't support a single installer for multiple architectures. > That's > the problem. You'll never get a 32bit installer to validate with 64 > bit > components in it, period. MSI requires that you build a single > installer for each architecture you target. You can use conditional > statements and variable replacement in your .wxs file to have a single > source file, but generate the two .msi files, but you must have the two. > *shrug* Just how it is. > > Chris > > On Tue, Oct 28, 2008 at 10:13 AM, Michael Owings <[EMAIL PROTECTED]> > wrote: > >> Hmmm -- I guess my question is -- what am I risking? Getting rid of >> the 32-bit installer is a non-starter for us (this isn't a corporate >> environment), and the 32-bit mixed installer works perfectly in both >> environments. (Our 64-bit components don't actually take up much > room). >> A single installer (at least for this product) seems to be a cleaner >> approach. Is there some gotcha I'm missing here? >> >> Christopher Karper wrote: >> >>> If you need a mixed installer, then you have to make it a 64 bit >>> installer. It doesn't make sense to install 64 bit components on a > 32 bit >>> system anyway, so just don't include those components in your 32 bit >>> installer, or alternately, don't offer a 32 bit installer. In some >>> corporate environments, that might work. >>> >>> Chris >>> >>> On Tue, Oct 28, 2008 at 9:19 AM, Michael Owings > <[EMAIL PROTECTED]<mailto: >>> [EMAIL PROTECTED]>> wrote: >>> >>> Pally Sandher wrote: >>> > Yes but you will get an ICE80 error when compiling if you set >>> > Win64="yes" on a component when your MSI is an x86 build & >>> vice-versa. >>> > >>> > Why would you want to? >>> >>> If you install mixed 32 and 64-bit components in a single install? > We >>> have an installer that MUST do this. What would be a better > approach? >>> -- >>> Teleoperate a roving mobile robot from the web: >>> http://www.swampgas.com/robotics/rover.html >>> >>> >>> > ------------------------------------------------------------------------ > - >>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>> challenge >>> Build the coolest Linux based applications with Moblin SDK & win >>> great prizes >>> Grand prize is a trip for two to an Open Source event anywhere in >>> the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> <http://moblin-contest.org/redirect.php?banner_id=100&url=/> >>> _______________________________________________ >>> WiX-users mailing list >>> WiX-users@lists.sourceforge.net <mailto: >>> WiX-users@lists.sourceforge.net> >>> https://lists.sourceforge.net/lists/listinfo/wix-users >>> >>> >>> >> -- >> Teleoperate a roving mobile robot from the web: >> http://www.swampgas.com/robotics/rover.html >> > ------------------------------------------------------------------------ > - > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge Build the coolest Linux based applications with Moblin SDK & > win great prizes Grand prize is a trip for two to an Open Source event > anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > WiX-users mailing list > WiX-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wix-users > > > > -- Teleoperate a roving mobile robot from the web: http://www.swampgas.com/robotics/rover.html ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users