Upload
tederich-weisheit
View
106
Download
0
Embed Size (px)
Citation preview
Uwe BaumannDeveloper GroupMicrosoft GmbH
Email: [email protected]
Windows Installer - effektiv einsetzenWindows Installer - effektiv einsetzen
Professionelle Setup-Features in eigenen Projekten realisieren
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
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
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
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
MSI effektiv einsetzen 6
Demo
Ein Setup mit IQ!Ein Setup mit IQ!
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
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
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;
MSI effektiv einsetzen 10
Datenbasiertes Setup
wacht über das System protokolliert die Installationen macht Setup zur Transaktion kann mit Admin-Rechten arbeiten
Rezept
Rezept
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
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)
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
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
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
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
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
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
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
MSI effektiv einsetzen 20
„Update by Reinstall“ 3
Implementierung:
MSIEXEC /fvomus Version2.msiMSIEXEC /fvomus Version2.msi
MSI effektiv einsetzen 21
Demo
„Update by Reinstall“„Update by Reinstall“
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
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
MSI effektiv einsetzen 24
Erkennen und Reparieren 1
Szenario: Die Applikation soll sich selbst per
Menübefehl reparieren können („Erkennen und Reparieren“)
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")
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
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
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
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
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
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)
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
MSI effektiv einsetzen 33
Demo
Eine Custom Actionmit InstallShield implementieren
Eine Custom Actionmit InstallShield implementieren
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
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
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)
MSI effektiv einsetzen 37
Fragen!?
Uff...Uff...