37
Uwe Baumann Developer Group Microsoft GmbH Email: [email protected] Windows Installer - effektiv Windows Installer - effektiv einsetzen einsetzen Professionelle Setup- Features in eigenen Projekten realisieren

Uwe Baumann Developer Group Microsoft GmbH Email: [email protected] Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

Embed Size (px)

Citation preview

Page 1: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

Uwe BaumannDeveloper GroupMicrosoft GmbH

Email: [email protected]

Windows Installer - effektiv einsetzenWindows Installer - effektiv einsetzen

Professionelle Setup-Features in eigenen Projekten realisieren

Page 2: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 2

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 3: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 3

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 4: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 4

Setup-Probleme

Undefinierter Systemzustand nach Abbruch des Setups, z.B. wegen Fehler

Unsaubere Deinstallation User oder anderes Setup löscht oder

manipuliert wichtige Files DLL-Hölle

Page 5: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 5

Einige MSI-Antworten

Saubere Deinstallation Transaktionale Installation

(„Alles oder nichts!“) Bedarfsgesteuerte Installation von

wenig gebrauchten Features oder ganzen Applikationen

Selbstreparatur Setup-Routine flexibel anpaßbar

Page 6: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 6

Demo

Ein Setup mit IQ!Ein Setup mit IQ!

Page 7: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 7

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 8: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 8

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 9: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 9

Skriptgesteuerte Installation

Das selbsterstellte Setup implementiert den Code zum Kopieren von Dateien und Überprüfen/Verändern des Systems.

Um eine Deinstallation zu ermöglichen, müssen alle Teile programmatisch entfernt werden.

Ein Setup-Programm kann andere App-Installationen beeinflussen!

if(bed) doStep1;...doStepN;

Page 10: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 10

Datenbasiertes Setup

wacht über das System protokolliert die Installationen macht Setup zur Transaktion kann mit Admin-Rechten arbeiten

Rezept

Rezept

Page 11: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 11

MSI Architektur

MSI PaketeMSI Pakete

FilesystemFilesystem RegistryRegistry

ApplikationenApplikationen

Management Management Tool (z.B. SMS)Tool (z.B. SMS)

Active directoryActive directory

Windows Installer APIWindows Installer API

Windows Installer Windows Installer serviceservice

KonfigurationsdatenKonfigurationsdaten Was ist wie auf dieser Maschine Was ist wie auf dieser Maschine

installiert?installiert?

Installations-Service im Installations-Service im SystemSystem Service unter Windows NTService unter Windows NT Führt den Setupvorgang durchFührt den Setupvorgang durch

APIAPI Installiert und konfiguriert Installiert und konfiguriert

Programme und FeaturesProgramme und Features StatusabfrageStatusabfrage Pakete erstellenPakete erstellen

PaketPaket Beschreibt den SollzustandBeschreibt den Sollzustand

Konfigurations-Konfigurations-datendaten

Page 12: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 12

Komponenten und Features

Component 1Component 1(WordCore)(WordCore)

Component 3Component 3(ExcelCore)(ExcelCore)

Component 2Component 2(MS Speller)(MS Speller)

ProductProduct(Office)(Office)

Feature 2Feature 2(Excel)(Excel)

Feature 1Feature 1(Word)(Word)

Entry pointEntry point(.doc)(.doc)

Entry pointEntry point(Shortcut)(Shortcut)

Entry pointEntry point(.xls)(.xls)

Entry pointEntry point(Shortcut)(Shortcut)

Entry pointEntry point(CLSID)(CLSID)

ResourceResource(Registry key)(Registry key)

ResourceResource(winword.exe)(winword.exe)

ResourceResource(Registry key)(Registry key)

ResourceResource(excel.exe)(excel.exe)

ResourceResource(Registry key)(Registry key)

ResourceResource(Mssp.dll)(Mssp.dll)

Feature 3Feature 3(Word Speller)(Word Speller)

Feature 4Feature 4(Excel Speller)(Excel Speller)

Page 13: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 13

Die MSI Datenbank

Features

Components

Shortcuts

Action

Files

CAB(Optional)

Summary Information Andere

Tabellen...

Verweise auf zu installierende Files

Spezielles Datenbankformat

• Vom Entwickler mit Tool (z.B. InstallShield, WISE) erzeugt

• Enthält relationale Tabellen

• Ein MSI pro Produkt Produkte haben

• Features

• Komponenten

• Installierbare Resourcen File mit Endung .MSI

Page 14: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 14

Demo

Einblick in ein MSI-FileEinblick in ein MSI-File

Tool Orca 1.2: http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/MSDN-FILES/027/001/530/msdncompositedoc.xml

Page 15: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 15

Caching von Metadaten

MyOffice.MSI

Quellpfad

Installations-prozeß

123456.MSI

(Kopie von MyOffice.MSI)

= Informationen über Konfigurations-Möglichkeiten

C:\winnt\installer

Zielsystem

Registry

Tatsächliche Konfiguration der

Anwendung

Anwendung

Page 16: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 16

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 17: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 17

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 18: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 18

„Update by Reinstall“ 1

Szenario: Eine Anwendung wurde geringfügig

verändert (Bugfix) Von der neuen Version wird ein MSI

erstellt Problem: Die alte Version existiert noch

auf vielen Rechnern

Page 19: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 19

„Update by Reinstall“ 2

Metainformation (Files, Versionen etc) von Version 1 der Applikation sind auf dem Rechner im MSI Cache

Metainformationen der Version 2 sind im neuen MSI

Vergleich ergibt die zu kopierenden Files

Konfiguration der Anwendung bleibt erhalten

Page 20: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 20

„Update by Reinstall“ 3

Implementierung:

MSIEXEC /fvomus Version2.msiMSIEXEC /fvomus Version2.msi

Page 21: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 21

Demo

„Update by Reinstall“„Update by Reinstall“

Page 22: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 22

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 23: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 23

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 24: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 24

Erkennen und Reparieren 1

Szenario: Die Applikation soll sich selbst per

Menübefehl reparieren können („Erkennen und Reparieren“)

Page 25: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 25

Erkennen und Reparieren 2

„MSI Aware“ Applikationen „Wissen“, daß sie mit MSI installiert wurden Implemetieren das MSI-API, um erweiterte

Funktionalitäten anzubieten

Dim msiInstaller As WindowsInstaller.Installer Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Dim msiInstaller As WindowsInstaller.Installer Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Page 26: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 26

Erkennen und Reparieren 3

Implementierung:

msiInstaller.ReinstallProduct MYTEXT_PRODUCTCODE_GUID, _ msiReinstallModeFileOlderVersion Or msiReinstallModeShortcut

msiInstaller.ReinstallProduct MYTEXT_PRODUCTCODE_GUID, _ msiReinstallModeFileOlderVersion Or msiReinstallModeShortcut

Page 27: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 27

Features nachinstallieren 1

Szenario: Ein wenig gebrauchtes Feature (z.B.

fremdsprachliche Rechtschreibprüfung) soll aus der Applikation „on demand“ nachinstalliert werden

Page 28: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 28

Features nachinstallieren 2

Implementierung:

msiInstallState = msiInstaller.FeatureState( _ MYTEXT_PRODUCTCODE_GUID, _ "MyTextSpeller") If msiInstallState <> msiInstallStateLocal Then If MsgBox("The Spellchecker is currently not installed. " &

Chr$(13) & "Would you like to install it?", _vbQuestion + vbYesNo, "Install Feature") = vbYes Then

Call msiInstaller.ConfigureFeature( _ MYTEXT_PRODUCTCODE_GUID, _ "MyTextSpeller", _ msiInstallStateLocal)

End If End If

msiInstallState = msiInstaller.FeatureState( _ MYTEXT_PRODUCTCODE_GUID, _ "MyTextSpeller") If msiInstallState <> msiInstallStateLocal Then If MsgBox("The Spellchecker is currently not installed. " &

Chr$(13) & "Would you like to install it?", _vbQuestion + vbYesNo, "Install Feature") = vbYes Then

Call msiInstaller.ConfigureFeature( _ MYTEXT_PRODUCTCODE_GUID, _ "MyTextSpeller", _ msiInstallStateLocal)

End If End If

Page 29: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 29

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 30: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 30

Agenda

Einleitung MSI Grundlagen MSI effektiv einsetzen:

Das MSI-Framework nutzen…

Anwendungsupdates ohne Aufwand

„MSI aware“ Applikationen schreiben…

Features „on demand“ nachinstallieren

„Erkennen und Reparieren“

Installer durch Skripte erweitern…

Seriennnummer überprüfen

Page 31: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 31

Custom Actions 1

MSI ist durch Skripte oder DLLs erweiterbar

Möglich sind VBScript, JScript, konventionelle DLLs

Austausch von Daten mit der aufrufenden Setup-Instanz über spezielle Objekte (Session, Database)

Page 32: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 32

Custom Actions 2

Implementierung:

Sub CheckPID()

'Get the Product IDsProductID = Session.Property("PIDKEY")

'Check if PID is OKif Left(sProductID, 3) = "123" then

MsgBox "PID has been validated. Thank you for using MyOffice.", vbOK + vbInformation, "PID validated"Session.Property("PIDIsOK") = "1"

elseMsgBox "Sorry, the PID you entered is invalid. Please try again.", _vbOK + vbCritical, "Incorrect PID"Session.Property("PIDIsOK") = "0"

end if

End Sub

Sub CheckPID()

'Get the Product IDsProductID = Session.Property("PIDKEY")

'Check if PID is OKif Left(sProductID, 3) = "123" then

MsgBox "PID has been validated. Thank you for using MyOffice.", vbOK + vbInformation, "PID validated"Session.Property("PIDIsOK") = "1"

elseMsgBox "Sorry, the PID you entered is invalid. Please try again.", _vbOK + vbCritical, "Incorrect PID"Session.Property("PIDIsOK") = "0"

end if

End Sub

Page 33: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 33

Demo

Eine Custom Actionmit InstallShield implementieren

Eine Custom Actionmit InstallShield implementieren

Page 34: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 34

Links und Ressourcen 1

Windows Installer SDK 1.2 Downloadhttp://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/457/msdncompositedoc.xml

Windows Installer SDK 1.5 (= 2.0)Beta Download http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/MSDN-FILES/027/001/530/msdncompositedoc.xml

Page 35: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 35

Links und Ressourcen 2

D42473 Überblick über die Windows Installer-Technologie   http://www.microsoft.com/IntlKB/Germany/Support/kb/D42/D42473.HTM

Visual Studio Installer Guided Tourhttp://msdn.microsoft.com/vstudio/downloads/vsi11/tour.asp

Page 36: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 36

Links und Ressourcen 3

“Am Anfang war die Installation”Christoph Haltiner, BasicPro 5/2000

"VB/VBA Developer's Guide to the Windows Installer" by Mike Gunderloy; Sybex (ISBN: 0782127452)

Page 37: Uwe Baumann Developer Group Microsoft GmbH Email: uwebaum@microsoft.com Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen

MSI effektiv einsetzen 37

Fragen!?

Uff...Uff...