{"id":712,"date":"2011-01-15T16:43:24","date_gmt":"2011-01-15T15:43:24","guid":{"rendered":"https:\/\/minibrain.wordpress.com\/2011\/01\/15\/buch-review-wix-a-developers-guide-to-windows-installer-xml\/"},"modified":"2011-01-15T16:43:24","modified_gmt":"2011-01-15T15:43:24","slug":"buch-review-wix-a-developers-guide-to-windows-installer-xml","status":"publish","type":"post","link":"https:\/\/abramowitsch.de\/blog\/?p=712","title":{"rendered":"Buch-Review: \u201cWiX: A Developer&#8217;s Guide to Windows Installer XML\u201d"},"content":{"rendered":"<p>Vor einigen Jahren bin ich auf das <a href=\"http:\/\/wixtoolset.org\/\" target=\"_blank\">\u201cWiX\u201d-Projekt<\/a> (WiX = Windows Installer XML) von <a href=\"http:\/\/www.robmensching.com\/\" target=\"_blank\">Rob Mensching<\/a> aufmerksam geworden. Dabei handelt es sich um ein Open Source Projekt von Microsoft (sogar das erste!), mithilfe dessen man via XML-Beschreibung eine MSI Installationsdatenbasis erzeugen kann.<\/p>\n<p>Nachdem ich zahlreiche Tutorials wie beispielsweise <a href=\"http:\/\/www.tramontana.co.hu\/wix\/\" target=\"_blank\">DAS WiX Tutorial<\/a> von Gabor Tramontana durchgearbeitet habe, konnte ich erstmals brauchbare MSI-Dateien erzeugen. In meiner Abteilung habe ich das Projekt dann publik gemacht und mittlerweile setzen alle Produkte meiner Abteilung WiX zum Erzeugen von Installationspaketen ein.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;margin-left:0;margin-right:0;\" alt=\"WiX: A Developer&#039;s Guide to Windows Installer XML\" align=\"left\" src=\"https:\/\/www.packtpub.com\/sites\/default\/files\/3722OS_MockupCover.jpg\" width=\"250\" height=\"308\" \/>Das Buch \u201c<a href=\"https:\/\/www.packtpub.com\/wix-a-developers-guide-to-windows-installer-xml\/book\" target=\"_blank\">WiX: A Developer\u2019s Guide to Windows Installer XML<\/a>\u201d von Nick Ramirez habe ich als Vorbereitung auf einen Vortrag zu dem Thema durchgelesen. Meiner Meinung nach ist es sowohl f\u00fcr Einsteiger als auch f\u00fcr Fortgeschrittene gleicherma\u00dfen geeignet. <\/p>\n<p>Das erste Kapitel \u201cGetting Started\u201d gibt einen kurzen Einblick in das WiX Toolset und erkl\u00e4rt grob die XML-Elemente und deren Bedeutung. Am Ende des ersten Kapitels ist man bereits in der Lage, einen Installer zu erstellen. Es werden alle daf\u00fcr notwendigen Schritte erkl\u00e4rt.<\/p>\n<p>Ab Kapitel zwei \u201cCreating Files und Directories\u201d geht\u2019s dann wirklich in die Tiefe. Es wird erkl\u00e4rt, die Dateien und Verzeichnisse in Komponenten verpackt und in Features gruppiert werden. Zudem gibt es Kniffe, wie gro\u00dfe Mengen an Dateien effizient in XML referenziert werden k\u00f6nnen \u2013 Stichwort \u201cHeat\u201d (Heat ist ein \u201cHarvester Tool\u201d aus dem WiX Toolset, das aus dem Dateisystem XML generiert). <\/p>\n<p>Kapitel drei \u201cPutting Properties and AppSearch to Work\u201d erkl\u00e4rt erst einmal, was Properties sind \u2013 n\u00e4mlich Variablen und wie diese bef\u00fcllt und referenziert werden. In zweiten Teil wird das Thema AppSearch (also Suche nach Dateien, Verzeichnissen, RegistryKeys, installierten Komponenten, ..) detailliert und wie jeder Abschnitt ausf\u00fchrlich mit XML-Codebeispielen erkl\u00e4rt.<\/p>\n<p>Startbedingungen sind Thema in Kapitel 4: \u201cImproving Control with Launch Conditions\u201d. Beispiel: Mein Programm installiert eine .NET Assembly. Hier wird gezeigt, wie ich pr\u00fcfen kann, ob und welches .NET Framework auf dem Zielrechner installiert ist.<\/p>\n<p>Ein wirklich komplexes Thema, die Installationsreihenfolge, ist Thema von Kapitel 5: \u201cUnderstanding the Installation Sequence\u201d. Dabei wird sowohl auf die UI-Sequenzen (nicht zu verwechseln mit Dialogen und Wizards) als auch auf die Execution Sequences eingegangen. Custom Actions, also das Ansprechen von externen DLLs, EXE-Dateien, das Ausf\u00fchren von JScript und VBScript-Code, runden das Kapitel ab.<\/p>\n<p>Kapitel 6, 7 und 8 drehen sich um das rudiment\u00e4re Erstellen von Benutzerschnittstellen, Dialogen usw. Dabei wird unter anderem auf vorgefertigte Dialog-Sequenzen als auch auf die einzelnen Controls eingegangen.   <br \/>Schade, dass der Autor hier n\u00fctzliche Tools verschweigt, mit denen man die UI deutlich komfortabler erstellen kann. Ich m\u00f6chte hier ein Tool nennen: <a href=\"http:\/\/www.icsharpcode.net\/opensource\/sd\/\" target=\"_blank\">SharpDevelop<\/a> von ic#Code. Es ist mit Abstand das beste Open Source-Tool f\u00fcr diese Aufgabe.<\/p>\n<p>Kapitel 9 erkl\u00e4rt noch einmal alle Tools, sowie deren Benutzung auf der Kommandozeile. Das ist aber in der Regel unn\u00f6tig, denn das Votive Projekt, das die Integration des Toolsets in Visual Studio mitbringt, ist f\u00fcr die meisten F\u00e4lle vollkommen ausreichend. Aber ok, schlecht ist es nicht.<\/p>\n<p>Kapitel 10 \u201cAccessing the Windows Registry\u201d erkl\u00e4rt wie Registry Keys sowohl gesetzt als auch gel\u00f6scht werden k\u00f6nnen.<\/p>\n<p>Lokalisierung ist Inhalt des Kapitels 12: \u201cLocalizing Your Installer\u201d. Hier wird erkl\u00e4rt, wie ein Installationspaket mehrsprachig gemacht werden kann.<\/p>\n<p>Kapitel 13 behandelt wieder ein ziemlich komplexes Thema: \u201cUpgrading and Patching\u201d \u2013 Welche Update-Typen gibt es? Was ist bei welchem Typ zu beachten?<\/p>\n<p>Ein Kapitel, das ich vermisst habe, sind Bootstrapper. Beispiel: Eine Setup.exe, die die Voraussetzungen auf dem Zielsystem pr\u00fcft und ggf. Software nachinstalliert. Visual Studio selbst bietet schon zahlreiche Bootstrapper-Pakete beispielsweise f\u00fcr das .NET Framework, die Visual C++ 20xx Runtimes, SQL Server, etc. an.<\/p>\n<p>Alles in Allem bin ich aber zufrieden mit dem Buch. Es enth\u00e4lt viele Code-Schnipsel in XML-Form abgedruckt, sodass es sehr praxisnah die Thematik behandelt. Als Schulnote wurde ich eine 2 vergeben.<\/p>\n<p>Wer sich allerdings mehr f\u00fcr Windows Installer im Allgemeinen interessiert, dem w\u00fcrde ich eher das Buch \u201c<a href=\"http:\/\/www.microsoft-press.de\/?cnt=product&amp;id=ms-5431\" target=\"_blank\">Inside Windows Installer 4.5<\/a>\u201d von Andreas Kerl empfehlen. Ein Kapitel aus diesem Buch behandelt ebenfalls das Windows Installer XML Toolset.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vor einigen Jahren bin ich auf das \u201cWiX\u201d-Projekt (WiX = Windows Installer XML) von Rob Mensching aufmerksam geworden. Dabei handelt es sich um ein Open Source Projekt von Microsoft (sogar das erste!), mithilfe dessen man via XML-Beschreibung eine MSI Installationsdatenbasis erzeugen kann. Nachdem ich zahlreiche Tutorials wie beispielsweise DAS WiX Tutorial von Gabor Tramontana durchgearbeitet [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[7],"tags":[128,65,98,99,103],"class_list":["post-712","post","type-post","status-publish","format-standard","hentry","category-buch","tag-buch","tag-msi","tag-windows-installer","tag-windows-installer-xml","tag-wix"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Ug90-bu","_links":{"self":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=712"}],"version-history":[{"count":0,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/712\/revisions"}],"wp:attachment":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}