Einstieg in das Windows Installer XML Toolset (WiX)

Transcrição

Einstieg in das Windows Installer XML Toolset (WiX)
Einstieg in das Windows
Installer XML Toolset (WiX)
Ralf Abramowitsch
[email protected] | @minibrain81 | http://minibrain.wordpress.com
Die Software ist fertig …
… jetzt muss sie „nur“ noch ausgeliefert werden.
Visual Studio Deployment Projects
gibt es in VS2012 leider nicht mehr …
Alternativen: Flexera InstallShield LE
Alternativen: Windows Installer XML Toolset
• Seit 5.4.2004 OpenSource Projekt unter dem Dach
der Outercurve Foundation (www.wixtoolset.org)
• Lead: Rob Mensching (www.robmensching.com)
• C# basiertes Toolset zur Erstellung von MSI
Paketen aus XML-Beschreibungen
Alternativen: Windows Installer XML Toolset
• Tools zum Kompilieren und Linken für MSI Pakete
• Burn: Bootstrapper und Chainer
• WiX SDK: Managed und Native Libraries
(z.B. für Custom Actions)
Alternativen: Windows Installer XML Toolset
• Erweiterungen
• Installieren von IIS WebSites
• Erstellen von SQL-Server Datenbanken
• Ausnahmen für die Windows Firewall definieren
• Windows GameCenter nutzen
•…
Was brauche ich, um loszulegen?
• WiX Toolset Installer: http://wixtoolset.org/
• Aktuelle Version: 3.7
• Burn-basierter Installer: ~20MB
Kurzeinstieg in Windows Installer
Grundlagen: Windows Installer und MSI Packages
Windows Installer Grundlagen
Windows
Installer Client
10
Windows
Installer
Service
Windows
Installer
Package
10
Konzept eines Windows Installer Package
Product
NotePad
Feature
Component
Resource
Core
Docs
NotePad
UserReg
HelpDocs
Notepad.exe
HKLM\
Software\
…
HowTo.pdf
11
Konzept eines Windows Installer Package
Product
NotePad
Feature
Component
Resource
Core
Docs
NotePad
UserReg
HelpDocs
Notepad.exe
HKLM\
Software\
…
HowTo.pdf
12
Konzept eines Windows Installer Package
Product
NotePad
Feature
Component
Resource
Core
Docs
NotePad
UserReg
HelpDocs
Notepad.exe
HKLM\
Software\
…
HowTo.pdf
13
Konzept eines Windows Installer Package
Product
NotePad
Feature
Component
Resource
Core
Docs
NotePad
UserReg
HelpDocs
Notepad.exe
HKLM\
Software\
…
HowTo.pdf
14
Bekannte Dateiendungen
Endung
Abkürzung
.msi
Managed Software Installation
.msm
Managed Software Merge Module
.msp
Managed Software Patch
.mst
Managed Software Transformation
15
15
Windows Installer Features
• Installation On Demand
• Features können über die Windows Installer API hinzugefügt werden (von der
Anwendung getriggert)
Produkte können auf Anforderung installiert werden  Advertising
• Resource Stability
• „Vital Check“ für Komponenten
16
16
Windows Installer Features
• Updates & Patches
• Major Upgrade
• Minor Upgrade
• Small Update
• Binary Delta Patches
17
17
Windows Installer Features
• Transaktional
• Nur ein MSI-Paket kann zu einem Zeitpunkt ausgeführt werden
• Starten eine MSI aus einem anderen MSI nicht möglich (Chainer)
• Bootstrapper notwendig
(Systemvoraussetzungen prüfen und ggf. installieren)
• Rollback
• Wiederherstellen eines konsistenten Zustands im Fehlerfall
18
18
Windows Installer Features
• Ausführliche Logging Features
• msiexec /i [msifile.msi] /l*v install.log
• Beispiel: install.log
19
19
Windows Installer Features
• Verwendung von Systemwiederherstellungspunkten
20
20
Windows Installer Features
• Verifizierbar durch Consistency Checkers
• ICE, internal consistency evaluators
• http://msdn.microsoft.com/enus/library/aa369554(VS.85).aspx
• Referenz der ICE Codes:
• http://msdn.microsoft.com/enus/library/aa369206.aspx
21
21
Orca
• Viewer und Editor für MSI Pakete
• Bestandteil des Windows Installer SDK
22
22
Windows Installer API
• Win32-basierte C-API (msi.h)
• Wrapper für C# in WiX-Toolkit verfügbar
• Hauptzweck: Product Management
• Installation, Deinstallation, Aufzählen von Produkten, Features und
Komponenten
23
23
Erstellen von MSI Paketen mit
Windows Installer XML
Migration eines Visual Studio Deployment Projects zu einem WiX Projekt
WiX Tools im Überblick
• Candle
• Compiler für WiX Source Dateien (.wxs) in Intermediate Object Dateien (.wixobj)
• Light
• Linker und Binder für .wixobj nach .msi
• Lit
• Erzeugt WiX-Bibliotheken
• Dark
• MSI Decompiler (erzeugt aus .msi .wxs)
• Heat
• Harvester: erzeugt .wxs Dateien aus dem Dateisystem, der Registry, COM-DLLs, ..
WiX Tools im Überblick
• Melt
• Konvertiert ein “Merge Module” (.msm) in eine Component-Gruppe in einer .wxsDatei
• Torch
• Generiert die Transform-Datei für einen Patch
• Smoke
• Führt Validation Checks auf einem .MSI-Paket oder .MSM-Paket aus
• Pyro
• Erzeugt die Patch-Datei (.msp) aus .wixmsp und .wixmst Dateien
• WixCop
• Konvertiert WiX v2 Projekte in WiX v3 Projekte
Quelle: http://wix.sourceforge.net/manual-wix3/tools.htm
Wichtige WiX Kommandozeilen Tools
Setup.wxs
Candle.exe
Setup.wixobj
Light.exe
Setup.msi
Das WiX Element
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
</Wix>
Das Product Element
Product Code
<Wix ...>
<Product Id="4E8049FC-4899-4A85-970F-61089FAA83A4"
Name="ExampleWixProject"
Language="1033"
Nur 3 Stellen werden ausgewertet
Version="1.0.0.0"
Manufacturer="Ralf Abramowitsch"
UpgradeCode="DFFE1A72-E275-4A70-9BDC-5A6CCCA0C292">
</Product>
Identifiziert das Produkt über
</Wix>
Versionen hinweg
Das Package Element
<Wix ...>
<Product ...>
<Package Id='PUT-GUID-HERE'
Description='NotePadDNC13'
Manufacturer='Ralf Abramowitsch'
InstallerVersion='200'
=msiexec.exe [MajorVersion] * 100 +
[MinorVersion]
Comments='A short description of the product.'
InstallScope='perMachine'
Compressed='yes'
InstallPrivileges='elevated'
Keywords='Installer,MSI,Database' />
</Product>
</Wix>
Erzwingt Installation mit Admin-Rechten
(UAC)
Das Media Element
<Wix ...>
Disc-ID kann über File referenziert werden
<Product ...>
<Package ... />
<Media Id="1"
Cabinet="contents.cab"
EmbedCab="yes"
CompressionLevel="high" />
</Product>
</Wix>
Das Directory Element
Hierarchie muss mit TARGETDIR beginnen
<Wix ...>
<Product ...>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MyProgramDir"
Name="ExampleWixProject">
<Directory Id="ASubDir"
Name="MySubDir"/>
</Directory>
</Directory>
</Directory>
</Product>
</Wix>
Das Directory Element
Vordefiniertes Verzeichnis
Beschreibung
AdminTools
Verzeichnis zu dem Admin-Tools
AppDataFolder
Anwendungsdaten des aktuellen Benutzers
CommonAppDataFolder
Anwendungsdaten für alle Benutzer
CommonFilesFolder
Pfad zu „Gemeinsame Dateien“
DesktopFolder
Pfad zum Desktop des aktuellen Benutzers
FavoritesFolder
Favoriten des aktuellen Benutzers
FontsFolder
Windows Fonts-Verzeichnis
LocalAppDataFolder
Lokale Anwendungsdaten des aktuellen Benutzers
MyPicturesFolder
Bilder-Ordner
NetHoodFolder
Netzwerkumgebung
PersonalFolder
„Meine Dokumente“ des aktuellen Benutzers
PrintHoodFolder
Drucker
Das Directory Element
Vordefiniertes Verzeichnis
Beschreibung
ProgramFilesFolder
Programme-Verzeichnis für 32-Bit-Programme
ProgramFiles64Folder
.. und 64-Bit-Programme
ProgramMenuFolder
Start-Menü: Programme
RecentFolder
„Zuletzt geöffnete Dokumente“
SendToFolder
„Senden An“ im Explorer
StartupFolder
Start-Menü
StartMenuFolder
Start-Menü-Ordner
SystemFolder
C:\Windows\System32 | C:\Windows\SysWow64
System64Folder
C:\Windows\System32 auf x64-Systemen
TempFolder
Temporäres Verzeichnis (%TEMP%)
TemplateFolder
Vorlagen
WindowsFolder
Windows-Ordner
Das Components Element
• Container für Dateien, Registry-Einträge, …
• Reference-Counting für Components in der Registry
• Component-Daten werden für Installation, Deinstallation und
Reparatur verwendet
Das Components Element
• Container für Dateien, Registry-Einträge, …
• Reference-Counting für Components in der Registry
• Component-Daten werden für Installation, Deinstallation und
Reparatur verwendet
Das Component Element
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="NotePadDnc13">
<Component Id="NotePadCoreBinaries"
Guid="80CE23D9-0CD4-42C3-A568-0DEA614C3B00">
<File Id="NotePadExe" Source="..\Binaries\Release\NotePad.exe" />
</Component>
</Directory>
</Directory>
</Directory>
Das Feature Element
• Logische Gruppierung von Komponenten
• Feature-Baum
• Features können über Kommandozeile hinzugefügt werden
• msiexec /i notepaddnc13.msi ADDLOCAL=“MyFeature”
• msiexec /i notepaddnc13.msi ADDLOCAL=ALL
Das Feature Element
<Feature AllowAdvertise="no"
Id="MyFeature"
Title="NotepadDNC13"
Level="1"
Absent="disallow">
<ComponentRef Id="NotePadCoreBinaries" />
<ComponentRef Id="NotePadHelp" />
</Feature>
Demo
Der erste WiX Installer
Dialoge
Dialoge
• Verwendung von Dialogen aus der WiXUIExtension.dll
• Erstellen eigener Dialoge
Dialoge: WiXUIExtension.dll
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
<UIRef Id="WixUI_Mondo" />
WixUI_FeatureTree
WixUI_Minimal
Kombinierter Welcomeund License Dialog
WixUI_Mondo
WixUI_InstallDir
Welcome
License
Destination Folder
Ready To Install
Welcome
License
Feature Selection
Ready To Install
Welcome
License
Setup Type (Typical /
Custom / Complete)
Feature Selection
Ready To Install
Demo
Den ersten Installer um eine GUI erweitern.
Dialoge aus WiXUIExtension.dll anpassen
• Austausch der Lizenzdatei durch eigene Lizenz im RTF-Format
• Austauschen der Bilder
• Anpassen der Texte in den Dialogen
• Anpassen der UI Sequence innerhalb der Dialog-Bibliothek
• Einfügen eigener Dialoge bei Verwendung der Dialog-Bibliothek
Demo
Anpassen der Dialoge aus der WiXUIExtension Bibliothek.
Dialoge: Eigene Dialoge erstellen
<UI>
<Dialog Id="MyDialog" Width="260" Height="85" Title="MyDialogTitle">
<Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17"
Default="yes" Cancel="yes" Text="No">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="yes">
<Publish Event="EndDialog" Value="Exit">1</Publish>
</Control>
<Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30"
NoPrefix="yes" Text="Do you really want to cancel?" />
</Dialog>
</UI>
Dialoge: Übersicht über verfügbare Controls
•
•
•
•
•
•
•
•
•
•
•
•
Billboard
Bitmap
CheckBox
ComboBox
DirectoryCombo
DirectoryList
Edit
GroupBox
Hyperlink
Icon
Line
ListBox
•
•
•
•
•
•
•
•
•
•
•
ListView
MaskedEdit
PathEdit
ProgressBar
PushButton
RadioButtonGroup
ScrollableText
SelectionTree
Text
VolumeCostList
VolumeSelectCombo
Demo
Erstellen eines neuen Dialogs.
Das Property Element
• Variablen werden über das Property-Element definiert
<Property Id="APPDATAPATH" Secure="yes"/>
• Referenzieren von Properties über eckige Klammern
<Condition Message="[ProductName] cannot be installed on this operating
system.">
Das Property Element
• Setzen von Property-Werten
• Über das Attribut „Value“
<Property Id="APPDATAPATH" Secure="yes" Value="D:\"/>
• Über das Text-Element
<Property Id="APPDATAPATH" Secure="yes">D:\</Property >
• Über Kommandozeilenargumente von msiexec
msiexec /i [mymsi.msi] APPDATAPATH=“D:\”
Das Property Element
• Vordefinierte Windows Installer Properties
• Manufacturer
• ProductName
• ProductVersion
• UpgradeCode
• Installed
• Alle vordefinierten Verzeichnisse
• …
• siehe http://msdn.microsoft.com/en-us/library/aa370905%28v=VS.85%29.aspx
Das Property Element
• Spezial-Eigenschaften: ARP*
• ARPCONTACT: [email protected]
• ARPURLUPDATEINFO: https://github.com/minibrain
• ARPHELPTELEPHONE: +49-(0)XXX-XXXX-XXX
• ARPINSTALLLOCATION: [INSTALLDIR]
• ARPCOMMENTS: NotePadDnc13 is installed in [INSTALLDIR].
• ARPHELPLINK: [HelpDir]Help.htm
Wie geht es weiter?
Zusätzliche Informationsquellen wie Bücher, Blogs, Links und Twitter Accounts.
Zusätzliche Informationsquellen
Windows Installer XML (WiX) Documentation
Sehr ausführliche und sehr gute Beschreibung
der Funktionalität.
Zusätzliche Informationsquellen
WiX 3.6: A Developer‘s Guide to Windows
Installer XML
von Nick Ramirez
http://www.packtpub.com/windows-installerxml-3-6-developers-guide/book
Zusätzliche Informationsquellen
Inside Windows Installer 4.5
„Erstellen und Verwalten von
Installationspaketen“
von Andreas Kerl
(leider nicht mehr verfügbar)
Zusätzliche Informationsquellen
The Definite Guide to Windows Installer
Technology
von Darwin Sanoy und Jeremy Moskowitz
http://eddiejackson.net/web_documents/The
_Definitive_Guide_to_Windows_Installer_Tech
nology.pdf
Zusätzliche Informationsquellen
WiX Tutorial von Gábor Deák Jahn
Umfangreiche Einführung in die WiX Installer
http://wix.tramontana.co.hu/
Zusätzliche Informationsquellen
Windows Installer Team Blog
mit nützlichen Tipps & Tricks rund im Windows
Installer und MSI
http://blogs.msdn.com/b/windows_installer_t
eam/
Zusätzliche Informationsquellen
Die offizielle WiX Projektseite
mit einer Übersicht über das Projekt und
hilfreichen Links. Erklärt auch einzelne WiX
Elemente.
http://wixtoolset.org/
Zusätzliche Informationsquellen
Die offizielle WiX Mailing List
Interessante Diskussionen, aber sehr
„geschwätzig“.
http://wix.sourceforge.net/mailinglists.html
Zusätzliche Informationsquellen @Twitter
Fragen?
Vielen Dank für Ihre
Aufmerksamheit
Tipps & Tricks: UI Designer
• WiXTrim (Open Source)
• http://sourceforge.net/projects/wixtrim/
• #develop (Open Source)
• http://icsharpcode.net
• WixEdit (Open Source)
• http://wixedit.sf.net
• WiXAware (kommerziell)
• http://www.wixaware.com/
• InStyler (kommerziell)
• http://www.instyler.com
Tipps & Tricks: Datei-Handling
• Dateien aus Verzeichnis einlesen
• Paraffin
• http://www.wintellect.com/CS/blogs/jrobbins/archive/tags/Paraffin/default.aspx
• https://github.com/Wintellect/Paraffin
• Heat
• Bestandteil des WiX Toolkits
Download Codebeispiele
Demo Codebeispiele können auf github heruntergeladen werden:
https://github.com/minibrain/DNC13/

Documentos relacionados