karma?

I’ve been riding the Microsoft high for the last week or so, so it was only fair that they would let me down and really screw up. Oh well, thankfully I’m not a Microsoft fanboy, so I will go ahead and call them out on their faults.

This story has to do with the Windows Installer framework and how poorly it is designed. On or around October 14th, Microsoft released a “critical security patch” that fixed SQL Server 2005–KB970892. Great… I always keep my patches up to date–or try to–so I went ahead and downloaded it. I didn’t actively do it, of course, since Windows Update takes care of all that. Unfortunately, the update was poorly designed and kept failing. All the time. Every time I opened my start menu, the little “Updates will be installed on shut-down” shield was winking at me. I didn’t realize it was the same update over and over again, and thought that perhaps updates are being triggered by each other, so that different updates are being installed.

However, a visit to the Windows Update page showed that the same KB970892 patch kept failing. With the descriptive error code of “Unknown error”. Awesome. If I had been a lazier, less obsessive person, I would have ignored the problem and let it fix itself. However, I decided to use “teh Google” to help me out. Apparently I wasn’t the only one with the issue. Apparently lots of people were having the problem. Solutions ranged from registry fixes to starting/stopping SQL services to many other random options. All suggested by third parties, since Microsoft didn’t think this was big enough to address. Even on their own damn forums.

The option I chose, that was marked the answer on one particular MSDN forums thread, involved downloading the Microsoft Windows Installer Clean Up utility and getting rid of all the installers for SQL Server products. This seemed like a viable solution since I haven’t and don’t plan to ever use SQL Server, so I set about my business. Now, a word of warning (unfortunately from hindsight). Just because it is called a “Clean Up utility” doesn’t mean that is what it does. I thought “clean up” had to do with cleaning up temporary files and the like that were generated on program installation. In actuality, clean up means to actually delete the installer files for the products you choose. Why anyone would want to do this is something I won’t understand, but why the utility is called clean up is something I’m pissed off about now. Very.

So I went through and removed all the installers for SQL server, inadvertently. I then happened upon a post later in that thread saying that following those steps broke Office. Hmm… interesting. I opened up Microsoft Word and sure enough I was greeted by a flurry of installer dialogs followed by an error message saying that Office wasn’t installed for this user. No Office. Fine… I’ll just repair it, right? Wrong. No repair allowed. Apparently you need to have the installer for SQL server to repair Office. Okay, gah, I’ll just uninstall and reinstall it. With a flashy new computer, the process is going to take 15 minutes tops.

Strike 3, I’m out. I can’t uninstall Office either, using the installer. Apparently to uninstall Office, you need to have the installer for SQL Server 2005. The logic here was beginning to baffle me. How many freaking dependencies did I have to fulfill to remove a freaking program? I Googled and found Microsoft-provided instructions for removing Office 2007 manually. There was an automatic utility I used first that seemed to succeed but I still wasn’t able to install Office since it was apparently still “installed”. But not for me, for some mysterious user that didn’t exist, so I wasn’t able to use it.

I used the manual-manual instructions, finally, and backed up the registry and set about deleting files here, there and everywhere. It took about 30 minutes to do and once I was done, I restarted. And the freaking SQL Server 2005 update was still sitting in Windows update, accompanied by a “Microsoft Office 2007 System Update”. WTF? I just went through and REMOVED MS Office… how the hell could I now be getting an update for it? Nonetheless, I selected both to install and it seemed to… WORK! I restarted my computer and guess what? Failed update… again.

Getting thoroughly annoyed, I decided to try and use System Restore to restore to before I had tried any of these shenanigans. No deuce there, either. Apparently system restore depended on some file that had been removed, and hence kept failing. I was under the impression that system restore files were stored in some alternate location so they could be used to usefully recover from a system “failure”. Apparently, not. So now I’m left with a computer with a mysterious version of Office 2007, an update for a program that doesn’t exist and a major headache.

Microsoft’s installer framework has baffled me. It seems like a ridiculous prerequisite for an installer to depend so heavily on another component such that it cannot even uninstall a program. I mean…. any program I install should be completely uninstallable, right? If I remove ALL Microsoft Office products, it should handle all the dependencies and remove EVERYTHING, not leave things here and there. This is nothing new, of course. If you install Visual Studio 2008 and then the service pack, you cannot actually uninstall the IDE without manually uninstalling the service pack first. And they don’t even tell you that… the uninstaller just goes through a process and then fails with a generic error message. Ridiculous.

Thankfully, I had made a backup of my entire registry before I set about removing any installers. So my plan of action tomorrow will be to restore the entire registry and hope things work from there. Of course, I’m not hopeful, since I have technically removed all the files for the Office installation now, so having the registry recovered is probably going to create a ton of deadlinks. Whooptee doo daaa!

On another note, I started re-watching Lost. I figured if I started now I would be all refreshed by the time the new season rolls around next year.

Leave a Reply

Your email address will not be published. Required fields are marked *