I am using WiX to build installers that is working very well for 32-bit
and for some 64-bit platforms.  I have two WiX projects in my solution,
one that targets the 32-bit installation and one that targets the 64-bit
installation.  The payload contains a couple of .NET assemblies and a
registry entry.

 

The installations between 32- and 64-bit platforms are very similar.
The assemblies, being .NET code, are all MSIL and the JIT takes care of
the real work of cross-platform compatibility.  Both installers deliver
the same file images to a bin folder.  The trouble is with the registry.
I have a couple of keys that need to be read by other components that
are 32-bit programs.  That means on the 64-bit machine I have to
register the "Program Files (x86)" but on a 32-bit machine I have to
register the "Program Files" folder.  The only differences between the
installers is the name of that folder, and that the key I write on a
64-bit machine has an extra "Wow6432Node" in it.

 

I have a component in the 64-bit file that looks something like this:

 

<Component Id="ComponentRegistry" Guid="yada-yada-blah-blah-blah">

                                <RegistryKey Id="RegistrationFile"
Root="HKLM" Key="Software\Classes\Wow6432Node\CLSID\{
yada-yada-blah-blah-blah }" Action="createAndRemoveOnUninstall">

                                                <RegistryKey Id="child"
Key="child " Action="createAndRemoveOnUninstall">

 
<RegistryKey Id="grandchild" Key=" {yada-yada-blah-blah-blah} "
Action="createAndRemoveOnUninstall"/>

                                                </RegistryKey>

                                                <RegistryKey
Id="RegistryComponent" Key="Component"
Action="createAndRemoveOnUninstall">

 
<RegistryValue Id="ComponentDefault" Type="string" Value="value"
Action="write"/>

 
<RegistryValue Id="ComponentValue" Name="name" Type="string"
Value="value" Action="write"/>

                                                                ...

 
<RegistryValue Id="ProblemPath" Name="Path" Type="string"
Value="C:\Program Files (x86)\path\some.dll" Action="write"/>

                                                                ...

                                                </RegistryKey>

                                                <RegistryValue
Id="RegistrationFileDefault" Type="string" Value="value"
Action="write"/>

                                </RegistryKey>

                </Component>

 

This component writes a registry key with two children and one
grandchild, and writes some values in one of the keys.  In the 32-bit
version of the installer this component uses "Program Files" instead,
and   This component writes the tree I expect on XP both 64-bit and
32-bit, in Win2k3 32-bit and 64-bit, Vista 32-bit, and Windows 2008
32-bit.  It fails on Vista 64-bit and on Windows 2008 64-bit.  I get a
cancel/retry/ignore dialog box that says:

 

                Could not create key:
Software\Classes\Wow6432Node\CLSID\{ yada-yada-blah-blah-blah
}\child\grandchild.  Verify that you have sufficient access to that key
or contact your support personnel.

 

Now during debugging, when that dialog is open, I can run regedit and
see that the key "Software\Classes\Wow6432Node\CLSID\{
yada-yada-blah-blah-blah }" has been written, so that the account
running the install process is allowed to write some keys.  Does anybody
know what is going on?  Can someone cite chapter and verse of the manual
I should have read to understand this?

 

TIA

 

Skip Sailors
Washington Publishing Company
ssail...@wpc-edi.com
Cell: 425.753.4601
Fax: 775-239-2061
www.wpc-edi.com

 

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to