This was a tricky one!
I was attempting to install the client tools for SQL 2008 on my Vista SP1 workstation. Whenever I got to the "Setup Support Files" step, it would fail with the following error.
TITLE: SQL Server Setup failure.
------------------------------
SQL Server Setup has encountered the following error:
MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = '{AEB9948B-4FF2-47C9-990E-47014492A0FE}'. Error code: 1608..
First, I tried my old friend, ProcMon. No luck. There was no sign of any access to that GUID in the registry or file system. So I scoured the Google. I found a lot of people complaining about this error with beta versions of SQL 2008 and the only solution was a reformat and reinstall. That's just not acceptible to me.
So, I fired up RegEdit and looked for that GUID. It turns out that GUID belongs to MSXML6. I figured maybe I had a corrupt MSXML6 installation, so I downloaded the package from Microsoft and then attempted to remove the old one in Programs and Features. It definitely was corrupt because it would not uninstall. I had to download and fire up the Windows Installer Clean Up to get rid of it. It's a nice, but dangerous tool, so be careful when using it.
Well, the removal happened without incident and I tried to reinstall MSXML6 from the installer. No luck. It would immediately "succeed" without even attempting to install (I guess that's code for FAIL). It was apparently seeing something somewhere to indicate MSXML6 was already installed still. I wanted to forcefully overwrite it, but nothing I tried worked. I tried MSIEXEC flags for repair and uninstall -- no good!
The only solution at this stage was to look at the MSI itself. MSIs are just simple little databases. It is relatively easy to modify MSIs if the pre-existing installation detection logic is failing (as in this case). Note: THIS IS EXTREMELY UNSUPPORTED BY MICROSOFT, SO PROCEED AT YOUR OWN RISK FROM THIS POINT ON.
Using Orca, which is a handy little tool for editing MSIs (unfortunately, you have to download a very large SDK to get to this tiny tool), I was going to try to remove previous installation detection conditions and force the MSI to reinstall over whatever remnants of MSXML6 were left. I took the shotgun approach because I had no idea which line was causing it to fail (and I was beginning to get very frustrated).
In the InstallExecuteSequence table, I first sorted by the Sequence column ascending (makes it easier to see the order the operations occur). I then dropped the following rows: SkipInstallCA, LaunchConditions, FindRelatedProducts, CA_SetRefCountUpgradeFlag, CA_SetRefCountNewerFoundFlag, IsPendingRebootKey, CA_ErrorDifferentLang, and CA_ErrorPendingReboot.
I then went to the InstallUISequence table and sorted by the Sequence column again. I then dropped the following rows: SkipInstallCA, LaunchConditions, CA_SetRefCountUpgradeFlag, CA_SetRefCountNewerFoundFlag, IsPendingRebootKey, CA_ErrorNewerVersion, CA_ErrorDifferentLang, and CA_ErrorPendingReboot.
That dropped pretty much every potential version-related error condition possible in this MSI that I could see. I then saved the MSI and launched it. MSXML6 installed. Yes!
Okay, so now I thought I had a working MSXML6, but the true test would be if SQL 2008 would install.
So, I fired up the SQL Server 2008 installation and...
IT WORKED!
Mystery Solved.
How did I get a corrupted MSXML6? I have no idea... I wish I did.