This post dives in to how to troubleshoot problems when installing the Visual Studio Team System 2008 Database Edition GDR.
 

Prerequisites

Before installing the GDR, please check the prerequisites!

Visual Studio Version & Edition:

First check if you have the right Visual Studio version and edition installed. You must have one of the following Visual Studio 2008 editions installed in order to install the Visual Studio Team System 2008 Database Edition GDR release:

  1. Visual Studio Team System 2008 Database Edition
  2. Visual Studio Team System 2008 Team Suite
  3. Visual Studio Team System 2008 Team Suite (90-day Trail)

If you have Visual Studio Team System 2008 Developer Edition installed and you are a MSDN subscriber you first need to download the additional Database Edition installation image and install the Database Edition in addition to the existing Developer Edition bit (this is an additive installation only), before you can install the GDR, please see this blog post for more detail on the SKU merge.

The next step is to make sure you have Visual Studio 2008 SP1 RTM installed.

NOTE: The GDR installer will block if you have the SP1 beta installed

Edition Checks:

The installer checks the Registry to validates the existence of an edition, the following Registry locations are checked to determine which edition you have installed.

Registry Key (32-bit OS) Value Type Value
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSTS\1033 SPIndex REG_DWORD 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSDB\1033 SPIndex REG_DWORD 1
       
Registry Key (64-bit OS) Value Type Value
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSTS\1033 SPIndex REG_DWORD 1
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSDB\1033 SPIndex REG_DWORD 1

As you can see the Edition is implicitly validated as part of the SP1 validation.

Besides checking if the prerequisite Visual Studio edition and version are installed, the installer also checks if the GDR is already installed by checking the Registry in the following location

Registry Key (32-bit OS) Value Type Value
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSDBGDR\1033 SPIndex REG_DWORD 1
       
Registry Key (64-bit OS) Value Type Value
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSDBGDR\1033 SPIndex REG_DWORD 1

Note: the LCID used in the Registry path (1033) will be different depending on language of the Visual Studio installation.

Implicit Prerequisites

Besides the prerequisites that are checked by the installer there are three components the GDR relies on, which are implicitly checked because they are part of the Visual Studio 2008 SP1 installation, however since they can be uninstalled independently and then can break the GDR functionality it is worthwhile calling them out explicitly.

Anatomy of SETUP.EXE

Now that we determined the prerequisites for installing the GDR, lets dissect the actual installer. SETUP.EXE itself is a self extract CAB file which contains the actual installer package. When you execute SETUP.EXE, it expands itself in to a temporary location on the disk where the have the largest amount for free space.

If you want to control where extraction happens you can extract SETUP.EXE yourself using SETUP.EXE /EXTRACT, this will prompt you with a location where you want to place the installation image.

image

The expanded setup image looks like this:

Directory & File Names:
cab1.cab
cab2.cab
dbprorepair2.exe
dhtmlheader.html
header.bmp
parameterinfo.xml
spinstaller.exe
spinstallerengine.dll
spinstallerui.dll
sqmapi.dll
uiinfo.xml
vsdb2008gdr.msi
watermark.bmp
1033\eula.rtf
1033\spinstallerresources.dll

When you expand the installer image and want install the GDR (when you call SETUP.EXE without parameters), you invoke SPInstaller.exe, which is the actual installer code, it will perform the prerequisite checks and run the various actual setups. Any parameters passed to SETUP.EXE will be implicitly passed on to SPInstaller.exe, which is why if you do SETUP.EXE /? you will get the following dialog describing the parameters you can pass in to SPInstaller.exe.

SETUP.EXE /? implicitly invokes SPInstaller.exe /?
image

Logging

When you are executing the installer (SPInstaller.EXE), it automatically creates a log file created in the users TEMP directory. The log file is a HTML file, named using the following convention: "Visual Studio Team System 2008 Database Edition GDR_YYYYMMDD_HHMMSSFFF.html"

The easiest way to find the log file is to:

  1. Start a Command Prompt
  2. Execute CD /D %TEMP%
  3. Execute DIR "Visual Studio Team System 2008 Database Edition GDR_*.html"

When you open the log file in your browser you will see something like this:
image

Visual Studio Team System 2008 Database Edition GDR_YYYYMMDD_HHMMSSFFF.html

In order to find the problem check the Errors and Messages options, this will show you a step by step report of what the installer is doing. In this example I did not have SP1 installed, the log file will show the following information:

...
[12/13/2008, 11:21:20] Equals: evaluating...
[12/13/2008, 11:21:20] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSTS\1033\SPIndex contains '0'
[12/13/2008, 11:21:20] (IronSpigot::ArithmeticExpression::Evaluate) all numeric characters - canonicalizing
[12/13/2008, 11:21:20] Equals evaluated to false
[12/13/2008, 11:21:20] Equals: evaluating...
[12/13/2008, 11:21:20] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSDB\1033\SPIndex does NOT exist.
[12/13/2008, 11:21:20] (IronSpigot::ArithmeticExpression::Evaluate) returning BoolWhenNonExistent's value: false
[12/13/2008, 11:21:20] Equals evaluated to false
[12/13/2008, 11:21:20] Or evaluated to false
[12/13/2008, 11:21:21] Equals: evaluating...
[12/13/2008, 11:21:21] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSTS\1033\SPIndex contains '0'
[12/13/2008, 11:21:21] (IronSpigot::ArithmeticExpression::Evaluate) all numeric characters - canonicalizing
[12/13/2008, 11:21:21] Equals evaluated to false
[12/13/2008, 11:21:21] Or evaluated to false
[12/13/2008, 11:21:21] Equals: evaluating...
[12/13/2008, 11:21:21] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSDB\1033\SPIndex does NOT exist.
[12/13/2008, 11:21:21] (IronSpigot::ArithmeticExpression::Evaluate) returning BoolWhenNonExistent's value: false
[12/13/2008, 11:21:21] Equals evaluated to false
[12/13/2008, 11:21:21] Or evaluated to false
[12/13/2008, 11:21:21] Not: evaluating...
[12/13/2008, 11:21:21] Or: evaluating...
[12/13/2008, 11:21:21] Equals: evaluating...
[12/13/2008, 11:21:21] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\VSDBGDR\1033\SPIndex does NOT exist.
[12/13/2008, 11:21:21] (IronSpigot::ArithmeticExpression::Evaluate) returning BoolWhenNonExistent's value: false
[12/13/2008, 11:21:21] Equals evaluated to false
[12/13/2008, 11:21:21] Equals: evaluating...
[12/13/2008, 11:21:21] (IronSpigot::RegKeyValueT<class ATL::CRegKey>::Evaluate) RegKeyValue: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0\VSDBGDR\1033\SPIndex does NOT exist.
[12/13/2008, 11:21:21] (IronSpigot::ArithmeticExpression::Evaluate) returning BoolWhenNonExistent's value: false
[12/13/2008, 11:21:21] Equals evaluated to false
[12/13/2008, 11:21:21] Or evaluated to false
[12/13/2008, 11:21:21] Not evaluated to true
[12/13/2008, 11:21:21] And evaluated to false
...

Based on the logging output we can determine that none of the Registry locations evaluating to TRUE, which implies SP1 is missing or the incorrect Visual Studio edition is missing.

I hope this information helps you more troubleshoot GDR installation problems more effectively.

-GertD