WIX Installer, RegistrySearch be cautious about 64bit OS

Published on : May 30, 2011

Category : General



During the making of BizTalk360 we learned so many lessons. But we didn’t have enough time to blog about each and every interesting challenge we faced. But now we are in the final stages of the product and we got bit of time to write about anything we encounter. There is also a plan to reveal the whole story behind the making of BizTalk 360 from inception to delivery. After we released the CTP version of BizTalk360, few users on Windows 2008 complaint about the installer pre-validation checks and not allowing them to proceed further. You can see the full thread here BizTalk 360 installer validates set of pre-conditions and it warns the user to rectify them before proceeding. This is mainly to guarantee BizTalk 360 will work after the installation. These preconditions are verified by various means. It could be standard Windows Installer properties like VersionNT, which stores the version number of Operating systems, or it could be some registry lookups like checking whether BizTalk server is installed, whether IIS is installed etc. One such search is the search for installation of Windows Authentication component for IIS 7.0 and above. It simply looks at the following location in registry “HKLMSOFTWAREMicrosoftInetStpComponents” and check the value of DWORD WindowsAuthentication. If the value is “1” then Windows Authentication component is installed, else it shows an error and installer won’t allow to proceed further. We tested this configuration in majority of the OS Windows 7, Windows 2008 and Windows 2008 R2. But we missed out on Windows 2008 R2, 64 bit. When the users reported this problem, we asked them to manually check this registry settings and everyone confirmed the specific Window Authentication value is present in the registry. It just made us puzzle for a nearly 2 weeks. In fact we created a separate build for those affected by issue, ignoring this check. Finally when we decided to tackle this situation once for all, we identified the issue is happening only on 64 bit OS of Windows 2008 (It’s still a puzzle for us, it works on 64 bit Windows 2008 R2). It turns out when the installer is doing the registry look up its looking a 32 bit version of the registry instead of 64 bit. But when the user open the registry using regedit, it opens up the 64 bit version directly. In Wix RegistrySearch there is a special attribute called Win64 (yes/no), which you need to set to instruct WIX to look at 64 bit registry as shown below <RegistrySearch Id=”CheckIISWinAuth64″ Root=”HKLM” Key=”SOFTWAREMicrosoftInetStpComponents” Name=”WindowsAuthentication” Type=”raw”  Win64=”yes”/> Even then its bit tricky, its not straight forward to ask WIX to look at corresponding registry value based on the OS. After trying few options like looking at VersionNT64 property which gets populated for 64bit OS, and few others, we finally settled for the following solution which works. We tackled the scenario by doing 2 RegistrySearches as shown below <Property Id=”IIS_WIN_AUTH”> <RegistrySearch Id=”CheckIISWinAuth” Root=”HKLM” Key=”SOFTWAREMicrosoftInetStpComponents” Name=”WindowsAuthentication” Type=”raw” /> </Property> <Property Id=”IIS_WIN_AUTH_64″> <RegistrySearch Id=”CheckIISWinAuth64” Root=”HKLM” Key=”SOFTWAREMicrosoftInetStpComponents” Name=”WindowsAuthentication” Type=”raw”  Win64=”yes”/> </Property> and verified the condition like this (IIS_MAJOR_VERSION = “#7” AND (IIS_WIN_AUTH = “#1” OR IIS_WIN_AUTH_64 = “#1”)) Now on Windows 2008, 64 bit OS the verification passes as shown below biztalk360 prerequisite checks Nandri Saravana