Windows Installer für eigene Erweiterungen

Anfang Dezember 2008 wurde im SSIS Team Blog ein sehr guter Artikel über die Erstellung von Windows Installern für eigene SSIS Tasks veröffentlicht. Neben der (leider immer noch nicht einwandfrei gelösten) Herausforderung die SSIS Erweiterungen bei der Installation direkt in der Toolbox zu installieren, galt die Installation der Komponente im richtigen DTS Pfad (auch auf Fremdsystemen) auch als erste größere Herausforderung beim Entwickeln eines eigenen Installers.
Matt Masson löst dies in seinem Artikel in dem er die Eigenschaft DefaultLocation eines benutzerdefinierten Ordners auf [ProgramFilesFolder]Microsoft SQL Server100DTS setzt. Dies funktioniert zwar einwandfrei, jedoch auch nur solange der SQL Server im Standard Programme Ordner installiert wurde, was bei einem Betriebssystem mit lokalisiertem Programme Ordner (XP oder Windows Server 2003) und einem englisch sprachigem SQL Server bereits zu Problemen führen sollte.

Eine weitere und vielleicht bessere Lösung ist, den Ordner über eine Variable zu setzen die zuvor mit dem richtigen Pfad aus der Registry gefüllt wird.
Beim SQL Server 2005 gab es dafür den Registry-Eintrag SOFTWAREMicrosoftMSDTSSetupDTSPath im Root HKEY_LOCAL_MACHINE, der im Visual Studio als vsdrrHKLM ausgewählt werden muss. Innerhalb der Startbedingungen des Setups kann die Registrierung nach speziellen Werten durchsucht werden. Die Ergebnisse bzw. die Werte der zu suchenden Schlüssel lassen sich in frei definierbare Variablen speichern.

ssis_installer

Diese Variablen können genaue wie der im Artikel angegebene Wert für den Pfad als Eigenschaft für die DefaultLocation gesetzt werden.

ssis_reg01

ssis_reg02

Auf einem Computer auf dem nur der SQL Server 2008 installiert ist, sucht man diesen Pfad allerdings vergeblich. Da die meisten Installer für SSIS Komponenten Versionsspezifisch sind, also für den SQL Server 2005 oder SQL Server 2008 bestimmt sind, eignet sich die Abfrage des Schlüssels SOFTWAREMicrosoftMicrosoft SQL ServerxxxVerSpecificRootDir, wobei xxx für die jeweilige Version 90 für SQL 2005 und 100 für SQL 2008 steht, für beide Versionen wesentlich besser.

Es ist jedoch noch darauf zu achten, dass die Ordnerstruktur im Setup bei geändertem Pfad dann nicht bei DTS, sondern bereits bei 90 respektive 100 anzufangen hat.

ssis_reg03