I've been struggling with installing a CAB Help file (generated from a MSHC) using WIX. The basic recipe I tried to follow is the one here: Installing Help with Help Library Manager and WiX .
In my particular case I'm not really struggling with the recipe but with x64/x86 targets. I've read the WIX hints from WiX tricks and tips that describe how to make 2 installers, one for each target. However, since I prefer to have just one installer rather than 2, I chose to implement only a x86 target.
When I install using a x64 platform everything works fine. When I try to do the same thing for x86, it complains that it cannot find HelpLibManager.exe
. On closer inspection, this seems reasonable, because this is installed in the 64-bit C:\Program Files\Microsoft Help Viewer\v1.0\HelpLibManager.exe
, while WIX uses the x86 folder C:\Program Files (x86)\Microsoft Help Viewer\v1.0\HelpLibManager.exe
.
To fix this, I attempted to read the correct path from the registry that contains where HelpLibManager is installed:
<Property Id="HELPLIB">
<RegistrySearch Id="HelpLib"
Root="HKLM"
Key="Software\Microsoft\Help\v1.0"
Name="AppRoot"
Type="raw" />
</Property>
<SetProperty Id="HELPLIBMANAGER"
Value="[HELPLIB]HelpLibManager.exe"
After="InstallInitialize"
Sequence="execute"/>
When you look into the registry, (within the Wow6432Node
of course), it tells me that the value of this key is: c:\Program Files\Microsoft Help Viewer\v1.0\
- which is correct. However, when I look at the log of the MSI, it reads "C:\Program Files (x86)\Microsoft Help Viewer\v1.0\HelpLibManager.exe"
, which is incorrect:
Property(S): HELPLIB = C:\Program Files (x86)\Microsoft Help Viewer\v1.0\
So apparently Wix changes the string value I read from the registry.
Can anyone explain to me what the proper way is to fix this?
The redirection to (x86) folder is done by Windows Installer automatically, not by WiX. The same happens if you are creating the package with other setup authoring tools too.
Unfortunately a 32-bit installer cannot write in "Program Files" folder on x64 machines. WOW redirection from the OS controls this during the install.
For creating a registry entry directly under HKLM\Software and not under HKLM\Software\Wow6432Node you can simply mark its component as 64-bit. Unfortunately this does not work the same for files, i.e. even if the component of the file is marked as a 64-bit one the OS will still redirect all files and folders under Program Files (x86).
EDIT:
What I'm most surprised of is that the string value read from the registry is being changed (see the dumped property value)
I know, that surprised I was too when this happened the first time for me.
To launch a file from that folder you could still have a chance, using a little trick, if you write a small custom action C#, with a DLL as output. You could get the value of the search in the custom action, parse it, and if present, manually remove the "(x86)" portion. Then temporarily disable WOW redirection, launch your file, after which you re-enable WOW redirection.
Don't forget to set a condition on the custom action, to run only VersionNT64 property is set, and only on install.