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

Reply via email to