30.2 ClickOnce-Verteilung 

30.2.1 Allgemeine Beschreibung 

Visual Studio 2010 bietet neben dem auf einer MSI-Datei basierenden Installationsassistenten eine zweite Möglichkeit, eine Windows-Anwendung zu verteilen. Diese wird als ClickOnce bezeichnet. Ganz neu ist die Idee, die hinter ClickOnce steckt, nicht, sie ist aber im Vergleich zu ähnlichen Verfahren deutlich verbessert worden.
Doch was steckt hinter ClickOnce? Während eine herkömmliche Windows-Anwendung auf dem lokalen Rechner installiert wird, kann eine mit ClickOnce veröffentlichte Anwendung auf einem Server zur Verfügung gestellt werden. Dabei kann es sich um einen Webserver oder um eine Netzwerkdateifreigabe handeln. Zudem ist die Veröffentlichung auf einem Datenträger möglich.
Wird eine Anwendung mit ClickOnce auf einem Webserver veröffentlicht, wird dem Benutzer innerhalb einer Webseite nur ein Link auf die Programmdatei zur Verfügung gestellt. Öffnet der Anwender den Link, werden die Programmdateien auf die lokale Maschine heruntergeladen und dort ausgeführt. Dabei werden die heruntergeladenen Dateien nicht etwa in einem Unterordner von Programme abgelegt, sondern in einem verschlüsselten Pfad im Benutzerprofil des aktuell angemeldeten Anwenders (Dokumente und Einstellungen\<Benutzer>\Lokale Einstellungen\Apps). Aus Sicherheitsgründen nimmt eine mit ClickOnce verteilte Anwendung weder Einträge in der Registrierungsdatenbank noch unter Desktop vor.
Ein besonderes Merkmal ist auch die Art und Weise der Aktualisierung. Bei der Bereitstellung mit der Installationsroutine muss der Benutzer bei jeder Aktualisierung einer Anwendung die gesamte Anwendung neu installieren. Bei der ClickOnce-Bereitstellung werden Aktualisierungen der Anwendung automatisch zur Verfügung gestellt. Der Client ist dabei selbst in der Lage festzustellen, ob eine neue Version vorliegt. Bei der Aktualisierung werden nur die Teile der Anwendung heruntergeladen, die geändert wurden. Anschließend wird die vollständige aktualisierte Anwendung von einem neuen parallelen Ordner aus neu installiert.
ClickOnce bietet die Möglichkeit, Anwendungen so einzurichten, dass der Benutzer sowohl online als auch offline mit der Anwendung arbeiten kann. Im Offline-Modus wird ein Programmpunkt im Startmenü angelegt, der die Anwendung startet. Diesen Eintrag gibt es nicht, wenn der Benutzer nur online mit der Anwendung arbeiten kann. Er kann die Anwendung nur starten, wenn er auf den erwähnten Link klickt.
Der Kern der neuen Architektur beruht auf zwei XML-Manifestdateien:
- dem Anwendungsmanifest
- dem Bereitstellungsmanifest
Das Anwendungsmanifest beschreibt die Anwendung einschließlich der Assemblys und der Dateien, aus denen die Anwendung besteht, sowie des Speicherorts, an dem Updates verfügbar sein werden. Das Bereitstellungsmanifest beschreibt, wie die Anwendung bereitgestellt wird, einschließlich des Speicherorts des Anwendungsmanifests sowie der Version der Anwendung, die auf den Clients ausgeführt wird. Beide Manifeste werden automatisch vom Visual Studio 2010 erzeugt.
Das Ziel von ClickOnce ist, die Verteilung von Anwendungen zentral zu verwalten und zu vereinfachen. Aber es gibt auch Einschränkungen, die schon in der Planungsphase zu berücksichtigen sind. Während der Einrichtung einer ClickOnce-Anwendung sind keine Operationen erlaubt, die administrative Rechte voraussetzen. Dazu gehören der Zugriff auf das Dateisystem und der Zugriff auf die Registrierungsdatenbank. Genauso wenig können Assemblys in den Global Assembly Cache (GAC) eingetragen oder Windows-Dienste eingerichtet werden.
30.2.2 Erstellen einer ClickOnce-Anwendung 

So viel zur Theorie. Nun wollen wir uns das Ganze natürlich auch in der praktischen Entwicklung ansehen. Legen Sie ein neues Windows-Projekt an. Um ClickOnce zu verstehen, müssen Sie überhaupt keinen Code schreiben, die »nackte« WinForm reicht vollkommen aus.
Alle Optionen, die ClickOnce anbietet, können Sie innerhalb eines Dialogs festlegen. Öffnen Sie dazu das Eigenschaftsfenster des Projekts, und aktivieren Sie die Lasche Veröffentlichen. In Abbildung 30.21 sehen Sie die Registerkarte. Alle Einstellungen, die Sie hier vornehmen, werden gespeichert und stehen beim Veröffentlichen auf dem Server zur Verfügung.
Abbildung 30.21 ClickOnce-Optionen einer Windows-Anwendung
Entscheidend ist zunächst einmal der Ort, an dem die ClickOnce-Komponente abgelegt wird. Als Ort der Veröffentlichung ist per Vorgabe ein virtuelles Verzeichnis auf dem lokalen Webserver eingetragen. Über die Schaltfläche gelangen Sie aber zu einem Dialog, der Ihnen alle Möglichkeiten offen lässt. Sie können einen der folgenden Orte angeben, an den die Anwendung kopiert werden soll:
- einen Dateipfad
- auf den lokalen Webserver (IIS)
- auf einen FTP-Server
- auf eine entfernte Website, die mit den FrontPage-Servererweiterungen konfiguriert ist
Abbildung 30.22 Dialog zum Einstellen des Orts der Veröffentlichung
Als Installationsmodi müssen Sie sich zwischen online und offline entscheiden. Fällt die Wahl auf den Offline-Modus, werden für die Anwendung ein Startmenüeintrag und ein Eintrag in den Systemeinstellungen unter Software hinzugefügt. Hierüber kann der Anwender später unter Umständen die Anwendung auch wieder deinstallieren.
Beachten Sie, dass Sie im Offline-Modus über die dann aktivierte Schaltfläche Updates… auch das Aktualisieren beeinflussen können. Den Dialog sehen Sie in Abbildung 30.23. Vorgegeben ist, dass die Anwendung nach Updates suchen soll. Wenn Sie sicher sind, dass Ihre Software so gut ist, dass kein Update zu erwarten ist, können Sie diese Option auch deaktivieren. Andernfalls können Sie die Häufigkeit der Update-Prüfung konfigurieren.
Abbildung 30.23 Konfiguration der Update-Suche
Ein Klick auf die Schaltfläche Anwendungsdateien… in der Registerkarte Veröffentlichen (siehe Abbildung 30.21) öffnet den Dialog, den Sie in Abbildung 30.24 sehen. Hier können Sie angeben, welche Dateien auf den Server kopiert werden sollen. Im vorliegenden Fall handelt es sich nur um die Programmdatei. Wäre eine benutzerdefinierte Klassenbibliothek unter Verweise eingebunden, würde die DLL automatisch mit in den Verteilungsprozess einbezogen.
Abbildung 30.24 Die zur Installation notwendigen Dateien
Im Dialog Erforderliche Komponenten… wählen Sie die Komponenten aus, die ebenfalls auf den Server kopiert werden sollen (siehe Abbildung 30.25).
Abbildung 30.25 Bereitstellung zusätzlicher Komponenten
Zuletzt können Sie noch unter Optionen… diverse Einstellungen vornehmen, die mehr allgemeiner Natur sind.
Nachdem Sie die Konfiguration fertiggestellt haben, steht der Veröffentlichung nichts mehr im Wege. Ich gehe im Weiteren davon aus, dass die Anwendung auf den lokalen Webserver kopiert wird und die Offline-Ausführung der ClickOnce-Anwendung ausgewählt worden ist. Auf dem Webserver wird ein virtuelles Verzeichnis angelegt, das standardmäßig namentlich identisch mit dem Projektbezeichner ist. Das Verzeichnis enthält neben dem Bereitstellungsmanifest (das ist die Datei mit der Erweiterung .APPLICATION) auch eine setup.exe-Datei, die die Installation startet, sowie die Datei publish.htm, die der Anwender aufruft, um die Anwendung zu installieren.
Zudem wird der Root der Anwendung ein Unterverzeichnis hinzugefügt, dessen Name sich aus dem Bezeichner der Anwendung, ergänzt um die vierstellige Versionsnummer, ergibt. Die Punkte der Versionsnummer sind dabei gegen Unterstriche ausgetauscht worden. Dieses Verzeichnis enthält die tatsächlichen Anwendungsdaten und das Anwendungsmanifest mit der Erweiterung .MANIFEST.
30.2.3 Installation einer ClickOnce-Anwendung 

Nun wollen wir auch noch die Anwendung installieren. Dazu öffnen wir im Internet Explorer die Datei publish.htm. Die Webseite enthält eine Schaltfläche, über die die Anwendung im lokalen Cache eingerichtet wird. Zuvor müssen Sie jedoch die Installation der Anwendung bestätigen, da der Herausgeber als nicht vertrauenswürdig eingestuft wird – obwohl Sie in diesem Fall selbst der Herausgeber sind. Anschließend wird das Programm gestartet.
Abbildung 30.26 Ansicht der Seite »publish.htm«
Da die Anwendung für den Offline-Modus eingerichtet worden ist, können Sie diese anschließend über das Startmenü starten. Dazu ist keine Verbindung zum Webserver notwendig. Sie können das selbst testen, indem Sie im Internetdienste-Manager den Webserver anhalten. Es wird zwar versucht, Kontakt zum Webserver aufzunehmen, aber das Starten der Laufzeitumgebung ist nicht davon abhängig. Hätten Sie sich für den Online-Modus bei der Kompilierung der Anwendung entschieden, wäre ein Aufruf von publish.htm notwendig gewesen. Diese Datei steht aber nur dann zur Verfügung, wenn der Webserver seine Dienste ausführt.
Wie verhält sich nun die Anwendung, wenn sie in irgendeiner Weise verändert und erneut veröffentlicht wird? Sie können das sehr einfach testen, indem Sie der Form eine Schaltfläche hinzufügen oder einfach nur die Hintergrundfarbe ändern. Veröffentlichen Sie die Anwendung erneut, wird automatisch die Versionsnummer erhöht – falls Sie auf der Registerkarte Veröffentlichen des Projekteigenschaftsfensters keine andere Vorgabe getroffen haben. Die erste Versionsnummer lautete 1.0.0.0, die neue lautet 1.0.0.1. Auf dem Webserver wird ein zweites Unterverzeichnis für die neue Version angelegt, und im Bereitstellungsmanifest wird die Umleitung darauf eingetragen.
Wenn Sie die Anwendung über das Startmenü aufrufen, sucht der Client nach eventuellen Updates. Ist der Webserver in Betrieb, wird die neue Version erkannt, geladen und ausgeführt. Der Anwender braucht in diesem Fall in keiner Weise einzugreifen oder selbst für die Neuinstallation der Anwendung zu sorgen. Der ClickOnce-Prozess übernimmt das vollkommen automatisch.