8.4 Weitergabe mit MS-Installer 

Für lokale .NET-Anwendungen, die ausschließlich mit ihrem eigenen Verzeichnis auskommen, reicht für eine Installation ein einfacher Kopierbefehl. Insbesondere sind weder Systemdateien noch die Registrierungsdatenbank betroffen. Haben Sie nur solche Anwendungen, können Sie diesen Abschnitt getrost überspringen. Wollen Sie dem Benutzer aber eine grafische Installationsoberfläche bieten oder außer der eigentlichen Anwendung noch andere Teile des Computers beeinflussen, brauchen Sie einen Installer. In Visual Studio wählen Sie dazu im Projektauswahldialog innerhalb des Knotens Setup und Bereitstellung eine Projektvorlage.
8.4.1 Weitergabeprojekte 

Visual Studio 2008 stellt Ihnen sechs verschiedene Weitergabeprojekttypen zur Verfügung:
- Setup-Projekt
- Websetup-Projekt
- Merge-Modulprojekt
- CAB-Projekt
- CAB-Projekt für intelligente Geräte
- Setup-Assistent (weniger Möglichkeiten, aber später änderbar)
Websetup-Projekt und Setup-Projekt
Diese beiden Typen unterscheiden sich darin, woher das Installationsprogramm die zu installierenden Dateien nimmt. Bei einem Setup-Projekt ist es das Dateisystem auf einem Rechner, bei einem Websetup-Projekt ein virtuelles Verzeichnis auf einem Webserver.
Merge-Modulprojekte
Ein Merge-Modulprojekt ist kein Setup-Projekt im eigentlichen Sinne und kann daher auch nicht eigenständig installiert werden. Ein Merge-Modul wird in andere Weitergabeprojekte integriert und erleichtert damit nur das Erstellen mehrerer Installationsprogramme, die identische Komponenten beinhalten. Merge-Module lassen sich daher besser mit DLL-Dateien vergleichen, denen eine ähnliche Aufgabe zukommt.
CAB-Projekte
CAB-Dateien beinhalten komprimierte Dateien, die zu einem leicht zu verteilenden Paket zusammengeschnürt werden. Eine CAB-Datei kann wie ein Merge-Modul in anderen Projekten verwendet werden, eignet sich aber auch zur Weitergabe von Dateien über das Internet.
Hinweis |
Wir werden uns in diesem Kapitel nur mit dem Setup-Projekt beschäftigen. |
8.4.2 Windows-Installer 

Bei den Dateien, die bei der Kompilierung eines Setup-Projekts erzeugt werden, handelt es sich im Wesentlichen nur um setup.exe und eine komprimierte Datei mit der Dateierweiterung .MSI. Die Datei setup.exe hat die Aufgabe zu überprüfen, ob auf dem Zielrechner der Windows Installer installiert ist. Falls er nicht installiert ist, wird in Abhängigkeit vom Betriebssystem entweder die Datei InstMsiW.exe oder die Datei InstMsiW.exe installiert (die Situation ist unwahrscheinlich, weil .NET ihn bereits zur Installation gebraucht hat). Erst danach kann die MSI-Datei installiert werden, die alle Dateien und Informationen zum Installationsprozess enthält.
8.4.3 Setup-Projekt 

Zuerst erstellen wir ein Setup-Projekt. Da der Projektbezeichner den Namen der MSI-Datei bestimmt, sollten Sie einen aussagekräftigen Namen wählen (siehe Abbildung 8.12).
Abbildung 8.12 Setup-Projekt
Außer zu Testzwecken werden Sie keine Debuginformation mit ausliefern wollen. Sie sollten daher zuerst eine Release-Version des Projekts kompilieren. Die Umschaltung dazu erfolgt in der Symbolleiste der Entwicklungsumgebung. Im linken Fensterteil fügen Sie die zu installierende Anwendung dem Anwendungsordner hinzu, benutzte Bibliotheken werden in der Regel automatisch mit eingebunden. In Abbildung 8.13 wurde GacAnwendung aus Abschnitt 8.2.2, »Globale Assemblies«, hinzugefügt.
Abbildung 8.13 Setup-Anwendung
Kompilieren des Weitergabeprojekts
Sind alle Einstellungen vorgenommen (einschließlich der, die wir noch erörtern werden), muss das Projekt nur noch kompiliert werden. Die vorgenommenen Einstellungen werden in einer Datei mit der Erweiterung VDPROJ gespeichert. Es ist eine reine Textdatei, die allerdings nicht verändert werden sollte. Vorausgesetzt, die Release-Konfiguration wurde erstellt, befinden sich die zu verteilenden Dateien im Unterordner Release des Setup-Projekts. Es handelt sich dabei um die Datei setup.exe, mit der die Installation gestartet wird, sowie um eine MSI-Datei mit den komprimierten Dateien des Projekts.
Hinweis |
Sie können die Installation bzw. Deinstallation über den Kontextmenüeintrag In/Deinstallieren des Weitergabeprojekts ausführen. |
8.4.4 Editoren eines Weitergabeprojekts 

Mit den Basiseinstellungen des Setup-Projekts wird der Benutzer willkommen geheißen. Dann wird ihm ein Vorschlag für das Installationsverzeichnis gemacht, der Fortschritt der Installation wird durch einen Fortschrittsbalken angezeigt, und am Ende wird die hoffentlich erfolgreiche Installation gemeldet.
Ein Installationsprogramm kann auch zusätzliche Ordner auf dem Zielrechner anlegen. Es lassen sich Bedingungen zur Installation bestimmter Dateien festlegen, Sie können zusätzliche Dialoge einbinden, Dateitypen können registriert werden usw. Ausgangspunkt sind die in Abbildung 8.14 gezeigten Weitergabeeditoren am oberen Rand des Weitergabeprojekts im Projektmappen-Explorers.
Abbildung 8.14 Symbolleiste eines Weitergabeprojekts im Projektmappen-Explorer
Von links nach rechts stehen in der Symbolleiste:
- Eigenschaften: Dialogfenster zur Festlegung allgemeiner Verteilungsbedingungen.
- Dateisystem-Editor: Hier werden die weiterzugebenden Dateien angegeben sowie die Ordner auf dem Zielrechner, in denen die Dateien installiert werden.
- Registrierungs-Editor: Hier legen Sie Registrierungsschlüssel und -werte für den Zielrechner fest. Nach erfolgreicher Installation kann ein Programm darauf zugreifen.
- Dateityp-Editor: Hier verknüpfen Sie die Anwendung mit Dateierweiterungen. Darüber hinaus werden die für den Dateityp zulässigen Aktionen festgelegt.
- Benutzeroberflächen-Editor: Hier fügen Sie dem Installationsvorgang zusätzliche Dialoge hinzu. Dieser Editor bietet die größte Einflussmöglichkeit auf den Installationsprozess.
- Editor für benutzerdefinierte Aktionen: Aktionen, die während der Installationsphase auf dem Zielrechner ausgeführt werden, zum Beispiel wenn ein Fehler auftritt oder im Falle einer Deinstallation.
- Editor für Startbedingungen: Aktionen, die beim Fehlen von Dateien auf dem Zielrechner vor der Installation ausgeführt werden. Ein Beispiel ist die Nachinstallation von .NET.
Hinweis |
Jeder Editor schreibt seine Bezeichnung in den Karteireiter des Fensters. |
8.4.5 Dateisystem-Editor 

Der Dateisystem-Editor ist nach dem Start eines neuen Setup-Projekts geöffnet. Er enthält alle Dateien, die vom Installationsprogramm benötigt werden, beispielsweise die Symboldateien. Die Ordner im linken Fenster repräsentieren die Ordner auf dem Rechner, auf den installiert wird. Weitere Ordner können Sie über das Kontextmenü eines der Fensterteile hinzufügen (die grauen in Abbildung 8.15 existieren schon). Dadurch können Sie beispielsweise eine Anwendung in das Startmenü eintragen oder einen Link auf dem Desktop des Benutzers setzen.
Abbildung 8.15 Spezielle Ordner
Wenn Sie einen Ordnerknoten markieren, werden im Eigenschaftsfenster dessen Eigenschaften angezeigt. Tabelle 8.6 listet die wichtigsten auf.
Eigenschaft | Beschreibung |
AlwaysCreate |
Bei True wird der Ordner auch angelegt, wenn er keine Dateien enthält. |
Condition |
Bedingung, die erfüllt sein muss, damit der Ordner installiert wird. |
DefaultLocation |
Standardinstallationsverzeichnis auf dem Zielrechner. |
Transitive |
Bei True wird bei jeder Installation der Anwendung die Condition-Eigenschaft ausgewertet, andernfalls nur bei der ersten Installation. |
Die Eigenschaft DefaultLocation hat folgenden Wert:
[ProgramFilesFolder][Manufacturer]\[ProductName]
Für den Firmennamen Tollsoft und den Produktnamen MyFirstApp wird der Installations-ordner
C:\Programme\Tollsoft\MyFirstApp
angeboten. Standardmäßig ist der Produktname der Name des Projekts. Sie können sowohl den Produkt- als auch den Firmennamen in den Projekteigenschaften festlegen.
Hinweis |
Viele der Eigenschaften des Setup-Projekts finden Sie in den Eigenschaften der MSI-Datei im Windows-Explorer wieder. |
Die Spezifikation von DefaultLocation kann spezielle Ordnerreferenzen in eckigen Klammern enthalten. Alle erlaubten finden Sie in der MSDN-Library unter dem Stichwort Windows Installer unter Properties. Tabelle 8.7 gibt einen Auszug wieder.
Eigenschaft | Verzeichnis |
AppDataFolder |
Anwendungsdaten des aktuellen Benutzers |
CommonAppDataFolder |
Anwendungsdaten für alle Benutzer |
CommonFilesFolder |
\Programme\Gemeinsame Dateien des aktuellen Benutzers |
DesktopFolder |
Desktop |
FavoritesFolder |
Favoriten des aktuellen Benutzers |
MyPicturesFolder |
Eigene Bilder des aktuellen Benutzers |
ProgramFilesFolder |
Programme |
SendToFolder |
SendTo des aktuellen Benutzers |
StartMenuFolder |
Startmenü des aktuellen Benutzers |
SystemFolder |
Sytem32 |
TempFolder |
Temp |
TemplateFolder |
Vorlagen des aktuellen Benutzers |
WindowsFolder |
Winnt |
Hinzufügen von Dateien und Ordnern
Zu installierende Komponenten fügen Sie über die Untermenüpunkte Ordner, Projektausgabe, Datei und Assembly des Kontextmenüs Anwendungsordner • Hinzufügen hinzu.
Die Entwicklungsumgebung fügt nicht nur die ausgewählte Programmdatei in das Weitergabeprojekt ein, sondern erkennt darüber hinaus auch alle Abhängigkeiten, sowohl die Abhängigkeit vom .NET Framework als auch die Abhängigkeit von benutzerdefinierten Bibliotheken (DLL-Dateien), die automatisch in das Projekt einbezogen werden.
Dateizugriff vom Programmcode
Wenn Sie davon ausgehen müssen, dass eine bestimmte Datei nicht auf dem Zielrechner in einem bestimmten Verzeichnis vorgefunden wird, müssen Sie die Datei in die Installationsroutine mit aufnehmen. Dazu eignet sich prinzipiell jedes Verzeichnis, das auf dem Zielrechner identifiziert werden kann. Möchten Sie die Datei im Anwendungsordner verteilen, fügen Sie die Datei dem gleichnamigen Knoten im Dateisystem-Editor hinzu.
Startmenü und Desktop-Icon
Im linken Teilfenster des Dateisystem-Editors werden Programmmenü- und Desktop-Ordner bereits angeboten. Sie müssen jeweils nur noch eine Verknüpfung zur Programmdatei einrichten. Dazu bieten sich zwei Wege an, die für beide Knoten identisch sind:
- Wählen Sie den Kontextmenüpunkt Neue Verknüpfung erstellen im rechten Fenster des Knotens, und wählen Sie im erscheinenden Dialog die Anwendungsdatei.
- Wählen Sie den Kontextmenüpunkt Verknüpfung erstellen zu... der Anwendungsdatei, und verschieben Sie den erzeugten Link in den entsprechenden Knoten.
Durch das Hinzufügen von Unterordnern können Sie den Link zur Anwendungsdatei in eine geeignete Untermenüstruktur verschieben. Sie sollten nicht vergessen, die automatisch generierten Verknüpfungsnamen umzubenennen.
Um einer Verknüpfung ein individuelles Symbol zuzuordnen, markieren Sie die Verknüpfung, klicken im Eigenschaftsfenster auf Icon und wählen aus der Dropdown-Liste die Option Durchsuchen aus. Im folgenden Dialog Symbol navigieren Sie zu der Symboldatei mit der Endung ICO, die Sie vorher dem Dateisystem-Editor an beliebiger Stelle hinzugefügt haben. Desktop-Icons sind 32×32 Pixel groß, das Programmmenü braucht 16×16 Pixel.
Da die Symboldateien zur Liste der zu verteilenden Dateien hinzugefügt wurden, werden sie normalerweise auf dem Zielrechner installiert. Um das zu vermeiden, können Sie die Eigenschaft Exclude dieser Dateien auf True einstellen. Die Folge ist, dass die Dateien dann nicht installiert werden, wohl aber bei der Installation zur Einrichtung verwendet werden. Sie werden nicht mehr im Dateisystem-Editor angezeigt, sondern im Projektmappenexplorer mit einem Verbotszeichen markiert.
Hinweis |
Im Projektordner der Anwendung befindet sich bei Windows-Anwendungen die Symboldatei App.ico. Diese dient als Symbol, wenn im Windows-Explorer die Ansicht Große Symbole ausgewählt ist. |
Cacheordner für globale Assembly
Eine besondere Bedeutung kommt dem Cacheordner für globale Assembly zu. Dateien, die Sie diesem Ordner hinzufügen, müssen einen starken Namen haben und werden automatisch im GAC (Global Assembly Cache) eingetragen. Intern wird demnach bei der Installation jede hier eingetragene Datei mit dem gacutil-Tool registriert.
Globale Assemblys, die Sie diesem Ordner hinzufügen, müssen nicht zwangsläufig auch unter Anwendungsordner aufgeführt sein. Verzichten Sie darauf, wird die Assembly nur im GAC eingetragen, kann aber nicht von anderen Anwendungen benutzt werden, denn über Verweise können in der Entwicklungsumgebung nur DLL-Dateien eingebunden werden. Möchten Sie die Dienste auch anderen Anwendungen zur Verfügung stellen, müssen Sie die Assemblierung deswegen zusätzlich in einem anderen Ordner eintragen. Meistens wird das auch der Anwendungsordner oder eines seiner Unterverzeichnisse sein.
Hinweis |
Verteilen Sie zusammen mit der globalen Assembly eine Publisher-Richtlinien-Assembly, muss diese auch im Cacheordner für globale Assembly angegeben werden. |
8.4.6 Der Registrierungs-Editor 

Die Registrierungsdatenbank ist die zentrale interne Datenbank von Windows. Da sie unabhängig von der zu installierenden Anwendung ist, können zum Beispiel dort Informationen abgelegt werden, die beim ersten Start der Anwendung bereits benötigt werden. Ich persönlich mag sie nicht, denn sie macht Anwendungen unflexibel und undurchschaubar für andere. Zum Beispiel können Sie eine installierte Anwendung nicht mal eben auf ein anderes Laufwerk verschieben und weiterarbeiten. Oder versuchen Sie mal herauszubekommen, welche Anwendungen automatisch beim Systemstart auch starten (etwa 30 Schlüssel). Schließlich können andere fehlerhafte Anwendungen aus Versehen Ihre Schlüssel ändern.
Im Registrierungs-Editor werden die Registrierungsschlüssel angezeigt, die den Standardregistrierungsschlüsseln von Windows entsprechen:
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USERS
- Benutzer/Computer-Hive
Die unter Benutzer/Computer-Hive eingegebenen Unterschlüssel und Werte werden im Knoten HKEY_CURRENT_USER installiert, wenn ein Benutzer bei der Installation die Option Aktueller Benutzer wählt. Wenn ein Benutzer bei der Installation Alle Benutzer auswählt, werden die Angaben im Schlüssel HKEY_USERS eingetragen.
Anmerkung |
Die Auswahl Aktueller Benutzer bzw. Alle Benutzer erfolgt in dem Dialog der Installation, in dem der Benutzer den Installationsordner bestätigt oder neu angibt. |
Einen neuen Unterschlüssel legen Sie über das Kontextmenü eines Knotens an; beliebig tiefe Gliederungsstrukturen sind erlaubt. Soll zu einem Schlüssel ein Wert definiert werden, müssen Sie zuerst den Datentyp festlegen. Es kann sich dabei um eine Zeichenfolge, einen Umgebungs-Zeichenfolgewert, einen Binärwert oder einen DWORD-Wert handeln. Anschließend wird dem Wert ein passender Name zugewiesen. Das kann sowohl im rechten Teilfenster des Registrierungs-Editors erfolgen als auch im Eigenschaftsfenster unter Value.
In Abbildung 8.16 ist im Registrierungs-Editor ein Schlüssel eingetragen, der TestKey heißt. Der Wert ist vom Typ String und beschreibt eine zugewiesene Zeichenfolge, die zumindest einmal nach der Installation angezeigt werden soll.
Hinweis |
Jeder Schlüssel darf genau einen Standardwert haben. Sie legen ihn fest, indem Sie dem Wert einen leeren Namen geben (Kontextmenü), der als (Standard) angezeigt wird. |
Abbildung 8.16 Der Registrierungs-Editor mit einem zusätzlichen Schlüssel
Die Eigenschaft DeleteAtUninstall eines Schlüssels scheint keinen Effekt zu zeigen, da die Schlüsseleinträge einer Anwendung nach der Deinstallation immer gelöscht werden.
8.4.7 Dateityp-Editor 

Dieser Editor legt das Doppelklickverhalten und Kontextmenüeinträge für Dateien gegebener Endungen fest. Über das Kontextmenü des Knotens Dateitypen auf dem Zielcomputer fügen Sie eine oder mehrere Dateitypen hinzu. Sie erscheinen im Dateityp-Editor als untergeordnete Knoten, denen Sie passende Namen geben sollten. Standardmäßig ist mit &Öffnen jedem Knoten sofort eine Aktion zugeordnet.
Eigenschaften eines Dateityps
Der Knoten eines zu verknüpfenden Dateityps hat mehrere Eigenschaften (siehe Tabelle 8.8).
Eigenschaft | Beschreibung |
Command |
Ausführbare Datei, die bei einer Aktion mit diesem Dateityp gestartet wird |
Description |
Anzeige in der Spalte Typ in der Detailansicht des Windows Explorers |
Extensions |
Durch Semikolon getrennte zu registrierende Dateierweiterungen ohne * |
Icon |
Symbol, das für die Dateien dieses Typs angezeigt werden soll |
MIME |
Zuzuordnende MIME-Typen (Multipurpose Internet Mail Extensions helfen Webbrowser und E-Mail bei der Verarbeitung binärer Daten.) |
Name |
Der im Dateityp-Editor verwendete Name |
EllipseButton.tifNachdem Sie der Eigenschaft Extensions eine oder auch mehrere durch Semikolon getrennte Dateierweiterungen zugeordnet haben, legen Sie die mit den Erweiterungen verbundene Anwendung in der Eigenschaft Command fest (der Button öffnet einen Auswahldialog). Sie wird bei allen noch festzulegenden Aktionen aufgerufen. Meistens ist es eine EXE-Datei, die unter Anwendungsordner zu finden ist.
Sie sollten zur besseren (professionelleren) Identifikation für den Dateityp mit der Icon-Eigenschaft ein individuelles Symbol festlegen. Die dazugehörige ICO-Datei muss ebenfalls im Dateisystem-Editor dem Weitergabeprojekt hinzugefügt worden sein. Zuletzt tragen Sie unter Description noch eine Zeichenfolge ein, die in der Detailansicht des Windows Explorers den Benutzern eine informative Beschreibung des Dateityps anzeigt.
Aktionen
Jeder neue Dateitypeintrag hat standardmäßig die Aktion &Öffnen. Als Standardaktion ist sie fett geschrieben und wird durch einen Doppelklick ausgelöst.
Hinweis |
Nur die oberste Position eines Dateitypknotens ist die Standardaktion. Sie können Aktionen durch Drag&Drop verschieben. |
Das Kontextmenü einer Datei im Windows Explorer zeigt alle der für den Dateityp spezifizierten Aktionen mit dem in der Eigenschaft Name angegebenen Namen. Das & vor einem Buchstaben kennzeichnet ein Tastenkürzel für den schnelleren Zugriff. Eine typische Aktion ist das Drucken eines Dokuments.
Hinweis |
Alle Aktionen starten die unter Command angegebene Anwendung mit den unter Arguments angegebenen Argumenten. "%x" ist das x-te Argument, "%1" der Pfad zur Anwendung. |
Nehmen wir als Beispiel die hier verwendete GacAnwendung. Sie hat eine Main-Methode, die die übergebenen Argumente als Zeichenkettenarray entgegennimmt und ausdruckt. Zur Erinnerung sehen Sie hier noch einmal den Quelltext:
'...\Applikation\GacAnwendung\Programm.vb |
Module Programm
Sub Main(args() As String)
Dim g As New GacTest.GacKlasse()
For no As Integer = 1 To args.Length
Console.WriteLine("{0}: {1}", no, args(no – 1))
Next
Console.WriteLine(g.Version())
Console.ReadLine()
End Sub
End Module
Abbildung 8.17 zeigt die beiden Aktionen Öffnen und Report, die beide mit den Dateiendungen .xxx und .zzz verknüpft sind.
Abbildung 8.17 Aktionen im Dateityp-Editor
Im Eigenschaftsfenster sind für die zweite Aktion spezielle Argumente eingetragen.
Abbildung 8.18 Aktionenargumente
Nach der Installation finden Sie die Aktionen im Kontextmenü.
Abbildung 8.19 Kontextmenü der installierten Anwendung
Die gezeigte Aktion führt zur Ausgabe der Argumente (siehe das Listing etwas weiter oben).
1: Pfad
2: C:\TestInstall\MeinDocument.xxx
Zweite Version
Wenn Sie im Programm GacAnwendung die übergebenen Argumente in Kontrollstrukturen auswerten, können Sie beliebige Reaktionen der Aktion implementieren.
8.4.8 Benutzeroberflächen-Editor 

Dieser Editor legt die Abfolge der bei der Installation gezeigten Dialoge fest. Der Knoten Installation definiert die Installation auf der lokalen Maschine, der Knoten Administratorinstallation die Installation im Netzwerk. Die Dialoge der in Abbildung 8.20 gezeigten Standardinstallation sind nur wenig beeinflussbar. Durch eigene Dialoge können Sie aber die volle Kontrolle erlangen. Auch eine automatische Installation ohne alle Dialoge ist erlaubt. Da die Dialoge immer nur als Standard-Icon angezeigt werden, empfiehlt sich eine Testinstallation.
Abbildung 8.20 Der Benutzeroberflächen-Editor
Eigenschaften der Standard-Installationsdialoge
Die Eigenschaften in Tabelle 8.9 sind nicht in allen dieser Dialoge zu finden.
Eigenschaft | Beschreibung |
BannerBitmap |
Bitmap- oder JPEG-Grafikdatei, die im Dialog angezeigt wird |
CopyrightWarning |
Text für einen Copyright-Vermerk im Dialog Willkommen |
ShowProgressBar |
Gibt an, ob der Fortschrittsbalken im Dialog Status angezeigt werden soll. |
UpdateText |
Text, der im Dialog Fertig angezeigt werden soll |
WelcomeText |
Text, der im Dialog Willkommen angezeigt werden soll |
Die Dialoge zeigen am oberen Rand in einem Bereich von 500×70 Pixel eine Hintergrundgrafik an, deren Pfad die Eigenschaft BannerBitmap speichert. Die im Dateisystem-Editor hinzugefügte BMP- oder JPEG-Grafikdatei wird weder gestreckt noch gestaucht. Es scheint keine Möglichkeit zu geben, die Beschriftung durch eine andere zu ersetzen.
Die im Dialog Willkommen angezeigte Warnung vor Urheberrechtsverletzung in der Eigenschaft CopyrightWarning sollten Sie anpassen, denn »US-amerikanische Urheberrechtsgesetze« scheinen mir in Europa unpassend. Die Begrüßung in WelcomeText ist allgemeiner:
Der Installer wird Sie durch die zur Installation von [ProductName] erforderlichen Schritte führen.
Den Fortschrittsbalken im Dialog Status können Sie mit der Eigenschaft ShowProgressBar ausschalten. Im letzten Standarddialog Fertig werden dem Benutzen in UpdateText Hinweise gegeben. Der Standardtext bezieht sich auf das .NET Rahmenwerk:
Prüfen Sie mit Windows Update, ob wichtige Aktualisierungen für .NET Framework zur Verfügung stehen.
Weitere Dialoge einfügen
In jede der drei Gruppen Starten, Status und Beenden können Sie nach Bedarf weitere Dialoge einfügen. Jeder Dialog darf nur einmal in einem Weitergabeprojekt verwendet werden. Die Dialoge sind keine normalen Fenster. Sie haben eine begrenzte Auswahl zur Verfügung:
- Der Splash-Dialog zeigt eine Begrüßungsbitmap an.
- Der Button Benutzer registrieren im gleichnamigen Dialog ruft eine beliebige ausführbare Datei auf.
- Im Dialog Kundeninformationen gibt der Anwender seinen Namen, den Namen der Firma und optional einer Seriennummer ein.
- Den Lizenzvertrag im Dialog Lizenzvertrag muss der Benutzer lesen und bestätigen.
- Der Dialog Infodatei zeigt einen Text an.
- je ein Dialog mit zwei, drei oder vier Optionsschaltflächen
- drei Dialoge mit bis zu vier Kontrollkästchen
- drei Dialoge mit bis zu vier Textfeldern
Dialoge fügen Sie über die Kontextmenüpunkte Dialogfeld hinzufügen der Knoten Installation und Administratorinstallation hinzu.
Der Dialog Splash
Die Eigenschaft SplashBitmap spezifiziert eine Bitmap oder JPEG-Datei für den 480×320 Pixel großen Anzeigebereich des Bildes, das weder gestreckt noch gestaucht wird. Mit der Voreinstellung Sunken=True wird die Grafik innerhalb des Rahmens abgesenkt dargestellt. Zur Fortsetzung muss der Anwender selbst auf eine Weiter-Schaltfläche klicken.
Der Dialog Benutzer registrieren
Der Dialog zeigt eine Schaltfläche Jetzt registrieren, die eine beliebige von Ihnen unter Executable angegebene ausführbare Datei aufruft. Zusätzliche Befehlszeilenargumente tragen Sie in der Eigenschaft Arguments ein. Abbildung 8.21 zeigt einen Ausschnitt mit dem festen Text (der Wert SetupDemo von ProductName wird automatisch eingesetzt) und der Schaltfläche.
Abbildung 8.21 Benutzer registrieren
Der Dialog Kundeninformationen
Der Dialog fordert vom Benutzer die Eingabe seines Namens, seiner Firma und optional der Seriennummer (siehe Abbildung 8.22).
Abbildung 8.22 Der Dialog »Kundeninformationen«
Neben BannerBitmap besitzt dieser Dialog die drei in Tabelle 8.10 gezeigten speziellen Eigenschaften.
Eigenschaft | Beschreibung |
SerialNumberTemplate |
Vorlage zur Überprüfung der eingegebenen Seriennummer |
ShowOrganization |
Gibt an, ob das Feld Organisation angezeigt wird. |
ShowSerialNumber |
Gibt an, ob das Feld Seriennummer angezeigt wird. |
Wird vom Anwender die Angabe einer Seriennummer verlangt, muss er sich an das in der Eigenschaft SerialNumberTemplate gegebene Muster halten. Der Windows Installer addiert die an den Platzhalterstellen # stehenden Zahlen (siehe Tabelle 8.11). Ist die Summe nicht durch sieben teilbar, wird ein Meldungsfenster angezeigt, und die Installation kann nicht fortgesetzt werden.
Platzhalter | Beschreibung |
# |
Eine Zahl, die nicht vom Überprüfungsalgorithmus erfasst wird |
% |
Eine Zahl, die vom Überprüfungsalgorithmus erfasst wird |
? |
Ein vom Überprüfungsalgorithmus nicht erfasstes alphanumerisches Zeichen |
^ |
Ein Zeichen in Großschreibung oder eine vom Überprüfungsalgorithmus nicht erfasste Zahl |
- |
Kennzeichnung, dass ein neues Eingabefeld beginnt (selbst keine Eingabe) |
Die Schablone SerialNumberTemplate steht in spitzen Klammern, zum Beispiel:
<#%%-##%#%%#>
Bei der Installation werden zwei Eingabefelder angezeigt: In das erste muss der Anwender drei Zahlen eingeben, in das zweite sieben. Die Summe aus der ersten, vierten, fünften, siebten und zehnten Zahl muss durch sieben teilbar sein. Der Mechanismus ist eine einfache Hürde gegen unrechtmäßige Installationen.
Nur die beiden Platzhalterkombinationen »^« mit »?« und »#« mit »%« werden gemeinsam in einem Eingabefeld angezeigt – es sei denn, mit einem Bindestrich werden separate Eingabefelder erzwungen. Alle anderen Kombinationen führen dazu, dass zwischen den Platzhaltern intern ein Bindestrich gesetzt wird.
Der Dialog Lizenzvertrag
Dieser Dialog zeigt einen Lizenzvertrag, den der Benutzer lesen (sollte) und bestätigen muss. Die Weiter-Schaltfläche wird erst dann aktiviert, wenn der Benutzer auf die Optionsschaltfläche Ich stimme zu klickt (siehe den Ausschnitt in Abbildung 8.23).
Die Lizenzinformationen sind in einer RTF-Datei gespeichert, die natürlich auch im Dateisystem-Editor hinzugefügt werden muss. Ein RTF-Dokument können Sie beispielsweise mit WordPad erstellen. In der Eigenschaft LicenseFile des Dialogs geben Sie die Datei an. Außer bei der Eigenschaft BannerBitmap können Sie mit der Eigenschaft Sunken den Inhalt der Lizenzinformationen in einem abgesenkten Rahmen darstellen.
Abbildung 8.23 Der Dialog »Lizenzvertrag«
Der Dialog Infodatei
Es gibt nur zwei Unterschiede zum Dialog Lizenzvertrag. Statt in LicenseFile steht der Dateipfad in ReadmeFile. Außerdem fehlt eine die Weiter-Schaltfläche blockierende Optionsschaltfläche Ich stimme zu.
Dialoge mit Optionsschaltflächen
Die Dialoge mit zwei, drei oder vier sich ausschließenden Auswahlmöglichkeiten dürfen je maximal einmal verwendet werden. Mit diesem Dialog können Sie beispielsweise den Anwender eine Sprache wählen lassen. Die Auswahl des Anwenders wird während des Installationsprozesses ausgewertet und berücksichtigt. Abbildung 8.24 zeigt die Eigenschaften des Dialogs.
Abbildung 8.24 Eigenschaften von Optionsschaltflächen
Für Abbildung 8.25 wurde BannerText der Wert Lingua gegeben und BodyText der Text Choisissez une langue s.v.p. zugewiesen. Als Beschriftung der Auswahlmöglichkeiten habe ich English für Button1Label und Deutsch für Button2Label gewählt. Button1Value ist der Wert, den die erste Optionsschaltfläche zurückliefert, wenn sie ausgewählt ist. Entsprechend ist es Button2Value für die zweite. Die Eigenschaft ButtonProperty benennt die Schaltflächengruppe. Der Name muss eindeutig bezüglich der gesamten Installation sein. Die letzte Eigenschaft ist DefaultValue. Sie selektiert die Optionsschaltfläche vor, die den angegebenen Wert in ihrer Value–Eigenschaft hat.
Hinweis |
Inkonsistenzen, zum Beispiel identische Werte für Optionsschaltflächen, fallen erst während der Installation auf. |
Abbildung 8.25 Dialog mit zwei Optionsschaltflächen
Auf die Auswahl können Sie in der Condition-Eigenschaft von zu installierenden Komponenten zugreifen, indem Sie den in der Eigenschaft ButtonProperty festgelegten Namen verwenden. Ihm wird automatisch der zur Auswahl korrespondierende Wert zugewiesen. Nur wenn die Condition-Eigenschaft leer oder ihr Wert True ist, wird die Komponente installiert. Dateien, Ordner, Registrierungseinträge sowie benutzerdefinierte Aktionen und Startbedingungen haben eine Condition-Eigenschaft. Hat in unserem Beispiel die Datei Lizenz.rtf unter Condition den Wert LANGUAGE=13 eingetragen und wurde Deutsch gewählt, wird die Datei installiert.
Dialoge mit Kontrollkästchen
Diese drei identischen Dialoge haben bis zu vier Kontrollkästchen, die Sie einzeln mit Visible=False ausblenden können. Jedes Kästchen kann die Werte Checked oder Unchecked annehmen und wird in der Condition-Eigenschaft von zu installierenden Komponenten unter dem Property-Namen angesprochen, zum Beispiel als CHECKBOXA3 (entspricht LANGUAGE des vorigen Abschnitts). Ansonsten sind die Eigenschaften und die Nutzung ganz analog zu den im letzten Abschnitt beschriebenen Optionsschaltflächen.
Hinweis |
Achten Sie wegen des identischen Aufbaus der drei Dialoge auf eine eindeutige Benennung der Kästchen (die Standardnamen gewährleisten dies bereits). |
Dialoge mit Textfeldern
Diese drei Dialoge zeigen bis zu vier Textfelder für individuelle Benutzereingaben. Die Beschriftungen stehen in je einer Label-Eigenschaft, die Vorbelegung steht in einer Value-Eigenschaft, und der Name, der in Condition-Eigenschaften verwendet wird, steht in einer Property -Eigenschaft.
Hinweis |
Achten Sie wegen des identischen Aufbaus der drei Dialoge auf eine eindeutige Benennung der Textfelder (die Standardnamen gewährleisten dies bereits). |
8.4.9 Editor für benutzerdefinierte Aktionen 

Der Editor hat vier Bereiche: Installieren, Commit ausführen, Rollback und Deinstallieren (siehe Abbildung 8.26). Jedem dieser Bereiche kann über sein Kontextmenü eine benutzerdefinierte Aktion zugeteilt werden – also nichts anderes als eine Datei, die ausgeführt wird (EXE, DLL oder Skript). Die Dateien müssen natürlich zum Weitergabeprojekt gehören.
Abbildung 8.26 Editor für benutzerdefinierte Aktionen
Der Knoten Installieren enthält die Aktionen, die am Ende der Installationsphase ausgeführt werden sollen, also wenn alle anderen Dateien bereits installiert worden sind. Während der Installation kann es zu Fehlern kommen. Wollen Sie in dieser Situation bestimmte Operationen automatisch ausführen lassen, tragen Sie diese unter dem Knoten Rollback ein. Nach einer erfolgreichen Installation werden alle Aktionen ausgeführt, die unter dem Knoten Commit ausführen eingetragen sind.
Benutzerdefinierte Aktionen im Knoten Deinstallieren werden aufgerufen, wenn eine Anwendung deinstalliert wird.
8.4.10 Editor für Startbedingungen 

Ob eine Anwendung überhaupt installiert werden kann beziehungsweise in welchem Umfang eine Installation erfolgt, kann mit dem Editor für Startbedingungen festgelegt werden. So können Sie zum Beispiel nach einer bestimmten Datei suchen, nach Registrierungseinträgen oder auch nach der Information, ob auf dem Zielcomputer das passende .NET Framework installiert ist.
Die Einstellungen im Editor für Startbedingungen werden vor Beginn der Installation überprüft. Ist das Ergebnis negativ, kann das Installationsprogramm zwei Dinge tun:
- Die Installation wird mit einer Fehlermeldung abgebrochen.
- Die Installation wird fortgesetzt. Möglicherweise werden dabei auch die Voraussetzungen dafür geschaffen, dass die Anwendung später problemlos ausgeführt werden kann.
Die Oberfläche des Editors
Unterhalb des Stammknotens Anforderungen für den Zielcomputer sind mit Zielcomputer durchsuchen und Startbedingungen bereits zwei untergeordnete Knoten eingetragen. Letzterer sucht auf dem Zielrechner nach dem .NET Framework und kann nicht gelöscht werden. Das Kontextmenü des ersten Kindknotens hat die drei in Abbildung 8.27 gezeigten Startkonditionen.
Abbildung 8.27 Der Editor für Startbedingungen
Bedingungen
Alle unter dem Knoten Startbedingungen angegebenen Bedingungen werden der Reihe nach ausgewertet. Jede der Bedingungen hat drei Eigenschaften:
- Condition: ein boolescher Ausdruck, der das Ergebnis der Bedingung formuliert
- InstallUrl: die lokale Adresse oder Internetadresse, die bei einem Klick auf die Schaltfläche Ja des »gescheitert«-Dialogs an den Windows Explorer geschickt wird
- Message: Text im »gescheitert«-Dialog Der Dialog hat die Schaltflächen Ja und Nein.
Die erste Bedingung, deren Condition-Eigenschaft den Wert False ergibt, führt zum Abbruch und zeigt einen Dialog mit den Schaltflächen Ja und Nein, dem Produktnamen in der Titelleiste und dem Text der Message-Eigenschaft. Die gesamte Installation findet nicht statt.
In der Condition-Eigenschaft können Sie Werte von Optionsschaltflächen, Kontrollkästchen oder der nun folgenden Zielcomputersuche verwenden. Diese muss nicht für die Startbedingungen verwendet werden, sondern kann auch die Installation einzelner Komponenten steuern. Zum Beispiel unterdrückt Condition = NOT FILEEXISTS1 die Installation einer Komponente, wenn die Zielcomputersuche namens FILEEXISTS1 den Wert False ergibt (die Datei also bereits existiert).
Hinweis |
Condition-Eigenschaften dürfen boolesche Operatoren wie NOT, AND, OR und = enthalten. Die Installation wird abgebrochen, wenn der Wert False ist. |
.NET Framework-Startbedingung
Die wichtigste Voraussetzung zur Installation und Ausführung eines .NET-Programms ist, dass das .NET Framework auf dem Zielcomputer vorhanden ist – natürlich in der richtigen Version. Die Common Language Runtime sowie die .NET Framework-Komponenten sind in der Datei dotnetfx.exe enthalten, die es in mehreren Sprachversionen gibt.
Der Editor für Startbedingungen fügt automatisch eine entsprechende unlöschbare Startbedingung hinzu. Die für die Anwendung erforderliche Version des .NET Frameworks tragen Sie in der Eigenschaft Version ein. Mit AllowLaterVersions können Sie höhere Versionen des .NET Frameworks als die angegebene akzeptieren.
Suche nach einer Datei
Nach der Auswahl im Kontextmenü benennen Sie das neue Element und selektieren es. Im Eigenschaftsfenster legen Sie mit Folder und FileName den Dateipfad fest. Die Eigenschaft MinDate, MinSize und MinVersion sowie die korrespondierenden Max-Varianten schränken die Suche zusätzlich ein. Das Suchergebnis ist True oder False und kann in der Condition-Eigenschaft einer zu installierenden Komponente unter dem Namen angesprochen werden, der in der Property-Eigenschaft festgelegt ist, zum Beispiel FILEEXISTS1.
Suche nach Registrierungseinträgen
Elemente, die nach einem Eintrag in der Registry suchen, haben fünf Eigenschaften:
- Name: Bezeichnung der Suche
- Property: Name in Condition-Eigenschaften
- RegKey: Schlüsselpfad (relativ zu Root und ohne Value)
- Root: Wurzelknoten (vsdrrHKLM, vsdrrHKCU, vsdrrHKCR, vsdrrHKU)
- Value: Schlüsselwert
Das Programm regedit.exe zeigt die Registrierungsdatenbank in einer halbwegs lesbaren Form. Wenn Sie hier unbekümmert agieren, können Sie sich Ihr gesamtes System unwiederbringlich zerstören.
Suche nach einer Windows-Installer-Startbedingung
Die Formulierung einer Windows-Installer-Startbedingung dient zur Suche nach einer Komponente, die in der Registrierungsdatenbank mit einer GUID (Globally Unique Identifier) eingetragen ist. Die GUID, eine 128-Bit-Zahl, die als Zeichenfolge beschrieben wird, muss in der Eigenschaft ComponentID eingetragen werden. Ansonsten unterscheiden sich die Suche nach der Komponente und die Auswertung des Suchergebnisses nicht von der Suche nach einer Datei oder eines Registrierungseintrags.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.