oh well.  I’ve spent a fair amount of my day attempting to manually hack out a lot of the various registry keys associated with SQL Server 2008 in the hopes of upgrading from the November 2007 CTP to the Feb 2008 CTP on my main machine (Vista x64 box).  Since I received questions about whether I’ve gotten this to work, I figure I’d blog about where I am so you can compare with your own experiences.

Bottom line – No luck.  Here’s the error I’m at now:

D:\temp\sqlctp6\servers>setup
The following error occurred:
MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = ‘{00E75F61-A126-4CE1-90B8-42295052F1AC}’. Error code: 1605.
Error result: 0xEEBAE95A
Result facility code: 0x6BA
Result error code: 0xE95A

I’ve learned a number of things – specifically that the non-SQL Server core Engine pieces have TONs of registry keys.  It seems that they took a shotgun and reserved a fraction fo the registry – SQLDMO and the DTS engine components seemed to be big offenders.

Either way, I’m getting blocked by my old friend the Windows Installer aka MSI.  Funnily enough, I’ve killed every key like this in the registry.  I’m also watching (via procmon.exe) and it’s not asking for a registry key like this.  So, I guess MSI has stored something away in another data store and I haven’t been able to find that to clean it up.  I’ve never had much patience for that thing.

I guess I’m in a bit of a reflective mood right now, as I am basically unable to install a product I had some hand in helping to write.  Certainly it’s a beta, and I’m not upset that it has bugs in the installer per se – I’m willing to accept that.  What I’m less willing to accept is that the system can get into a state that is so obviously *&%$$%ed up and from which there is no real recovery path.

Let’s look at where things failed here:
1. MSI storing information outside of the registry that impacts whether it runs or not (ie whether I can install or not).  No documentation on what to do when things get away from the good case.
2. GUIDs – customers don’t care about them.. I don’t care about them.  I can’t remember numbers that long.  Why am I dealing with this?  I’m happy if you give me a number that I can pass to some other program, but this one seems not so useful.
3. The error message is not “actionable”.  What do I do to fix this?  Where should I read additional information?
4. The “Error result” in this example.  Now, most people would have given up and called support… Instead I said “I should read up on this API and see what it says”.  So I google for it (because loading help takes SO darn long and it asks me all sorts of privacy policy and other nonsense before I can get what I want AND it’s not installed, of course ;) and I find the MSDN page on it – great.  It says nothing about this.
5. On the MSDN page, the errors are only listed using the C header literals – no hex codes on the page. grrr.  The installer didn’t translate it for me back to the constant in the help page.
6. So I fire up Visual Studio 2008 and go to the error lookup tool, and I enter this code.  No good – it’s not listed anywhere.  That seems bad.
7. I go back to the MSDN page, figure out that I should look in MSI.H.  Luckily, I have the Vista Platform SDK installed, so I go find that file.  Then I determine it’s not even listed there either.
8. google on the error code by itself yields nothing of interest

So I’m left asking “Why is all of this so hard?”.  The bottom line is that it SHOULDN’T be. 

Application design is an important aspect of any system.  As systems get more complex, it obviously becomes more challenging to make everything work.  It’s important to determine the various use cases for your program, whatever it is, and then determine how you are going to manage the customer experience through all the steps of that process.  Here, the installation process failed on multiple levels and through multiple components.  The experience should be “your installation failed.  Here’s how you can clean it up”.  Even if that requires manual steps (it *is* a beta), there should be a path and at the end of that path should be a happy customer with a working computer installation.

I’m obviously left with options like “reinstall my OS”, “install a VM” (which I won’t do because I play games on this machine), or “find another machine for CTP6″, which may be what I end up doing.

Conor finds himself longing for the days of .ini files all of a sudden.  he also apparently finds himself speaking in the third person about himself ;).  the old days of INI files would have been pretty easy to fix a failed install – “delete this directory and reinstall”.

I hope this helps the others having trouble with CTP6 installation.  I’ll see what I can do tomorrow to get a machine set up with SQL 2008 CTP 6.

Conor Cunningham