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