 
                                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/