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/