[wix-users] why does 64 bit bundle install key/value pairs under the 32 bit HKLM/Software/Win6432Node registry key?

Ian Bell ib at ianbellsoftware.com
Wed Oct 12 17:27:55 PDT 2016


Edwin,

Being able to create two different deployment programs (i.e. one for a 32
bit application, the second for the 64 bit application) using a single WIX
project in VS is certainly a convenience.   However, burn provides the only
mechanism for installing prerequisites that an application is dependent on.
In other words, if the MSI were capable of installing the prerequisites
along with my application then there would be no need for me to use burn and
this would certainly make registry access a little bit easier.     I
acknowledge my understanding of and experience with WIX  is limited and that
is perhaps why I consider prerequisites the overriding reason for using burn
instead of the issue of having a single entry point.   If I have understood
you correctly, then personally, I would favor having two entry points if
only to maintain simplicity and consistency in writing to different 32 and
64 bit areas of the registry and hard disk.

Cheers,

Ian




-----Original Message-----
From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of
Edwin Castro
Sent: 12-Oct-16 16:22
To: WiX Toolset Users Mailing List
Subject: Re: [wix-users] why does 64 bit bundle install key/value pairs
under the 32 bit HKLM/Software/Win6432Node registry key?

Something that hasn't been explicitly mentioned is why burn is a 32-bit
process to begin with.

The purpose of burn is to provide a single entry point to install 32-bit
and/or 64-bit packages. Since you can't install 64-bit packages or run
64-bit executables on 32-bit windows, then burn certainly needs to be a
32-bit process on 32-bit windows. IF you could have both 32-bit burn and
64-bit burn, then you'd have two entry points rather than a single one. If
you have multiple packages to install, then burn could still be helpful but
if all burn was doing is giving you a mechanism to install a 32-bit MSI OR
64-bit MSI based on the target OS, then having both 32-bit and 64-bit burn
would simply add more complexity for very little value add. In that case,
you'd be better off just distributing the 32-bit MSI or the 64-bit MSI
directly once you know which burn you're going to deliver.


> > The question is,
> > how does the 64 bit version of my application know whether it was 
> > installed using the WIX based MSI installer or the WIX based SETUP
installer?

The registry API allows me to say that I always want to read the 32-bit hive
regardless of whether I'm a 32-bit or 64-bit process.

See https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129.aspx

If your application is .NET, then you could use RegistryKey.OpenBaseKey if
you're on .NET 4

See
https://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.openbas
ekey.aspx

If you're on earlier versions of .NET then, you'd have to use pinvoke to
call the C API directly.

--
Edwin G. Castro

On Wed, Oct 12, 2016 at 12:35 PM, Hoover, Jacob <Jacob.Hoover at greenheck.com>
wrote:
> 32 bit processes write to 32 bit keys.... It would be smell if burn
registered elsewhere.
>
> Your app shouldn't need to look in the registry for the bundle info, but
if it does it should use the existing logic inside of dutil in Butil.cpp.
If your process is a 64 bit process, this code would have to be tweaked to
only access the 32 bit locations.  I still don't see a reason as to why your
application would need to know about the UninstallString, but with a given
bundle upgrade code you can find this
(BundleEnumRelatedBundle->BundleGetBundleInfo).
>
> Note, only the bundle registration is done in 32 bit land, if your bundle
installs 64 bit MSI's then they register into the 64 bit location. If there
is a configuration option your BA collects, then one would think you would
pass it to your application installer via a MSIProperty, and then your MSI
puts it in the registry where it sees fit.  Using that pattern, then your
application doesn't need to care about a bundled install vs a bare install,
as the location will be the same for both.
>
>
> -----Original Message-----
> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On 
> Behalf Of Ian Bell
> Sent: Wednesday, October 12, 2016 2:02 PM
> To: 'WiX Toolset Users Mailing List' <wix-users at lists.wixtoolset.org>
> Subject: Re: [wix-users] why does 64 bit bundle install key/value pairs
under the 32 bit HKLM/Software/Win6432Node registry key?
>
> Burn only writes to the 32 bit registry?   OUCH - the 'code-smell' is
> already detectable.   JJJ
>
>
>
> The WIX based MSI installer adds configuration information to 32 bit or 64
bit registry keys depending on which soluction platform (i.e. 32 bit or 64
> bit) of the WIX base MSI project is built in VS2015.   So far, so good.
> Now, you have just confirmed the same is not true for WIX based SETUP
(i.e.
> bundle) installers - these installers only add configuration 
> information to
> 32 bit registry keys.  Here is the problem.  My app needs to know where to
find configuration information added to the registry by WIX based MSI and
> SETUP installers (e.g. the 'UninstallString'  key/value pair).   If the 64
> bit version of my application was installed using the WIX based MSI
installer then my application needs to look for the installer added
information in the 64 bit registry keys (this is the expected location).
> On the other hand, if the 64 bit version of my application was installed
using the WIX based SETUP installer then my application needs to look for
the installer added information in the 32 bit registry keys (this is the
> unexpected location and where the 'code-smell' begins).   The question is,
> how does the 64 bit version of my application know whether it was
installed
> using the WIX based MSI installer or the WIX based SETUP installer?
There
> are several hacks that come to mind such as writing a custom installer
that adds this extra information to the registry (i.e. was the application
installed using an MSI or a SETUP installer) and rewriting the source code
> to accommodate this hack, hence the 'code-smell'.   Oh well, I'll just
have
> to decide which of these hacks is the lesser evil and get on with it.
>
>
>
> Anyways, thanks you for responding so quickly.   Now I can start to
grapple
> with the next WIX based SETUP hiccup. J
>
>
>
> Cheers,
>
>
>
> Ian
>
>
>
>
>
>
>
>
>
> -----Original Message-----
> From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On 
> Behalf Of Bob Arnson
> Sent: 12-Oct-16 13:22
> To: WiX Toolset Users Mailing List
> Subject: Re: [wix-users] why does 64 bit bundle install key/value pairs
under the 32 bit HKLM/Software/Win6432Node registry key?
>
>
>
> Yes. Burn is currently 32-bit.
>
>
>
> -----Original Message-----
>
> From: wix-users [ <mailto:wix-users-bounces at lists.wixtoolset.org>
> mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of Ian Bell
>
> Sent: Wednesday, 12 October, 2016 12:59
>
> To:  <mailto:wix-users at lists.wixtoolset.org> 
> wix-users at lists.wixtoolset.org
>
> Subject: [wix-users] why does 64 bit bundle install key/value pairs under
the 32 bit HKLM/Software/Win6432Node registry key?
>
>
>
> The 32 bit version of my WIX setup bundle adds key/value pairs under 
> the 32 bit 
> HKLM/Software/Win6432Node/Microsoft/Windows/CurrentVersion/Uninstall
>
> registry key.    Examples of the keys added to the registry are
>
> BundleCachePath, BundleVersion, QuietUninstallString and UninstallString.
>
> Now, I found the 64 bit version of my WIX setup bundle also adds 
> key/value pairs under the 32 bit 
> HKLM/Software/Win6432Node/Microsoft/Windows/CurrentVersion/Uninstall
>
> registry key and this is not where I expected to find the 64 bit 
> key/value
>
> pairs.   Instead, I expected the 64 bit version of my WIX setup bundle to
>
> install under  these key/value pairs under the 64 bit registry key
>
> HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall.   My application
>
> needs to know where the key/value pairs installed by my WIX bundle are
>
> located in the registry.    Is it normal for the 64 bit version of the
setup
>
> bundle to add these key/value pairs to the 32 bit version of the registry
key?
>
>
>
>
>
> Thanks,
>
>
>
>
>
> Ian
>
>
>
>
>
>
>
> ____________________________________________________________________
>
> WiX Toolset Users Mailing List provided by FireGiant 
> <http://www.firegiant.com/> http://www.firegiant.com/
>
>
>
> ____________________________________________________________________
>
> WiX Toolset Users Mailing List provided by FireGiant 
> <http://www.firegiant.com/> http://www.firegiant.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/

____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant
http://www.firegiant.com/



More information about the wix-users mailing list