bonn-to-code.net MSI Deployment Projekte Einige kurze Gedanken 22.04.2008 Dr. Jochen Manns EMail: Website: [email protected] http://www.jochen.jochen-manns.de bonn-to-code.net Agenda Visual Studio und die MSI Datei Veränderte Installationsabläufe Veränderte Installationsumgebung Windows Installer Automation Hauptziel: es geht weniger um die vorgestellten Detailprobleme (so schmerzhaft die auch sind, wenn sie einen unvorbereitet treffen), sondern vielmehr darum, den Hauch eines Gefühls dafür zu bekommen, was man ohne Kosten und mit wenig Aufwand aus der Visual Studio Zugabe Deployment Projekt machen kann. bonn-to-code.net MSI und Visual Studio Deployment Projekte Viele Wege, wie man sie erzeugt Viele Details, mit denen man sie füttern kann das ist aber heute nicht das Thema Wat nix kos‘ dat is och nix? Viele Möglichkeiten der Konfiguration Eigene Installationskomponenten (na ja) Wenig Möglichkeit, Abläufe zu beeinflussen Starke Abhängigkeit vom Hersteller Aber für den Hausgebrauch viel für lau bonn-to-code.net Was ist die MSI Datei? Basiselemente sind Tabellen Steuertabellen mit Abläufen Tabellen mit Parametern Datentabellen Sprachtabellen … Ganz lapidare Antwort: ein Script Abläufe aus den Steuertabellen Parameter und Daten aus den anderen Tabellen Quasi interpretierter p-Code bonn-to-code.net bonn-to-code.net Die Installationsreihenfolge Visual Studio 2005 Alte Version deinstallieren Neue Version installieren Visual Studio 2008 Umgekehrt (Begründung: Performance) Wann wird eine Datei ersetzt? Relevant ist die FileVersion (Voreinstellung) Diese ist oft die AssemblyVersion Die will man aber vielleicht nicht ändern… Bei mir etwa in der Beta-Phase bonn-to-code.net bonn-to-code.net bonn-to-code.net bonn-to-code.net Adminstrative Installation Läuft nun als LocalSystem (XP) Hat immer alle benötigten Rechte Gestartet vom MSI Dienst Zugriff auf den Desktop möglich Wo bleibt der Kontext aktueller Anwender? Anwendung startet am Ende der Installation Etwa über eine Custom Action Sieht ganz normal aus Läuft aber als LocalSystem (XP) Sieht keine Benutzereinstellungen bonn-to-code.net bonn-to-code.net MSI Automation Script fähige COM Komponente Es gibt auch eine C++ API .NET Wrapper habe ich noch nicht gesehen Erlauben den Zugriff auf die MSI Datei Einfach nur Tabellen auslesen (einfaches SQL) Tabellen manipulieren Installation durchführen Und … bonn-to-code.net Einige Objekte für die Automation Installer Database View Das Ergebnis eines SQL Befehls Record Eine Zeile in einem View Auslesen und Verändern Product … bonn-to-code.net Dim path path = “…MSI" Dim msi Set msi = CreateObject("WindowsInstaller.Installer") Dim db Set db = msi.OpenDatabase(path, 1) Dim view Set view = db.OpenView("SELECT `Action`, `Type` FROM `CustomAction` WHERE `Type` = 3585") view.Execute Do While (true) Dim Record Set Record = view.Fetch If (Record Is Nothing) Then Exit Do Dim action action = Record.StringData(1) Dim inner Set inner = db.OpenView("SELECT `Target` FROM `CustomAction` WHERE `Source` = '" + action + "'") inner.Execute Dim args args = inner.Fetch.StringData(1) inner.Close If (InStr(1, args, "/StartMgr=") > 0) Then Record.IntegerData(2) = &h601 view.Modify 2, Record Exit Do End If Loop view.Close db.Commit bonn-to-code.net Weitere Informationen Beschreibung der MSI Tabellen (MSDN) http://msdn2.microsoft.com/en-us/library/cc185688(VS.85).aspx Windows Installer Automation http://msdn2.microsoft.com/en-us/library/aa369432(VS.85).aspx Mein Blog http://jochen.jochen-manns.de/index.php/2008/02/29/spas-mitvisual-studio-2008-hier-deployment-projekte/