Veröffentlicht: 07. Feb 2005
Von Mauro Sant'Anna
In diesem Artikel wird die ClickOnce-Technologie erläutert und mit anderen Bereitstellungstechnologien verglichen. Zudem zeigt der Autor, wie Sie ClickOnce in Ihren Anwendungen verwenden können. Dieser Artikel enthält auch Links zu englischsprachigen Seiten. (11 gedruckte Seiten)
Auf dieser Seite
Einführung
Warum Windows Forms?
.NET Framework 1.x: Hypertextverweise für EXE-Dateien
Updater Application Block
ClickOnce
Eine ClickOnce-Anwendung
Bereitstellungsdetails
Ausführen der Anwendung
Vergleichstabelle
Schlussbemerkung
Einführung
ClickOnce ist eine neue Bereitstellungstechnologie für Windows Forms, die in Visual Studio 2005 enthalten ist. Mit ClickOnce können Sie Anwendungen einfach installieren und Webanwendungen mit Smart Clients einfach aktualisieren. Die Bereitstellung von Windows Forms-Anwendungen über HTTP ist seit der ersten Version des .NET Framework verfügbar und wurde seither ständig weiterentwickelt. In diesem Artikel werden die Vorteile von Windows Forms-Anwendungen und die Entwicklung dieser Technologie bis hin zu ClickOnce erläutert. Außerdem enthält er ein einfaches Beispiel, in dem die offizielle Beta 1-Version von Visual Studio 2005 verwendet wird.
Warum Windows Forms?
Seit den Anfängen des World Wide Web sind die meisten Benutzer und Entwickler mehr an Webanwendungen als an "normalen" Windows-Anwendungen interessiert. Webanwendungen sind nicht nur modern, sondern durch einige Eigenschaften besonders interessant:
-
Der Zugriff auf eine Webanwendung ist von überall möglich, solange eine Internetverbindung verfügbar ist. Der Clientcomputer muss nicht einmal Windows ausführen. Ist es für eine Anwendung erforderlich, dass weltweit darauf zugegriffen werden kann, ist eine reine Webanwendung eine sehr gute Lösung.
-
Eine Webanwendung kann einfach bereitgestellt und aktualisiert werden. Es genügt, die Anwendungsdateien in ein Verzeichnis auf einem Webserver zu kopieren, damit alle Clients sofort die neue Anwendung verwenden können. Kein komplizierter Umgang mit DLLs oder Registrierungsschlüsseln, kein Registrieren von COM-Klassen, die Anwendung funktioniert einfach!
Der Schwerpunkt in diesem Artikel liegt beim letztgenannten Punkt, der Bereitstellung. Im Vergleich mit der traditionellen Bereitstellung von Windows-Anwendungen hat das von Webanwendungen verwendete HTTP-Protokoll verschiedene Vorzüge.
Trotz aller Begeisterung für das Internet zählt Benutzerfreundlichkeit nicht gerade zu den herausragenden Eigenschaften von Webanwendungen. Der Vergleich mit Windows-Anwendungen zeigt einige Nachteile des Internets:
-
Die Benutzeroberfläche ist nicht besonders funktionsreich. Funktionen, die bei einer Windows-Anwendung selbstverständlich sind, wie Drag & Drop und Klicken mit der rechten Maustaste, sind in einer Webanwendung schwer oder gar nicht umsetzbar.
-
Selbst wenn wir es schaffen, vielfältige Funktionen für die Benutzeroberfläche zu verwirklichen, ist dazu meist unverhältnismäßig viel Skripting auf dem Client erforderlich - und dieser Code ist besonders schwierig zu codieren und zu debuggen.
-
Eine Webanwendung nimmt viele Serverressourcen, Bandbreite und die Geduld der Benutzer in Anspruch, da viele Funktionen auf dem Server durchgeführt werden: Dabei werden Daten zuerst zum Server übertragen, dort verarbeitet und anschließend die Ergebnisse zum Client zurückgesendet. Dadurch können längere Wartezeiten entstehen.
-
Drucken ist auf den Bildschirmdruck begrenzt. Formatierungen wie z. B. Seitenumbrüche sind aufgrund unterschiedlicher Schriftarten, Ränder und Papierformate kaum steuerbar.
-
Einige der genannten Probleme können durch Plug-Ins oder ActiveX-Steuerelemente verringert werden. Mit diesen gibt es jedoch häufig die gleichen Bereitstellungsprobleme wie mit den alten, nicht webbasierten Anwendungen.
Können wir die einfache Verteilung von Webanwendungen mit der vielfältigen Clienterfahrung von Windows-Anwendungen kombinieren? Die Lösung hierfür ist das .NET Framework. Bereits seit der ersten Version bietet das .NET Framework die Verteilung von Windows Forms-Anwendungen über HTTP, ohne die üblichen Probleme.
Diese Art von Anwendungen ist besonders für Intranet-/Extranet-Szenarios interessant, für die kein weltweiter Zugriff erforderlich ist und bei denen wir vermuten können, dass auf den Endbenutzercomputern Internet Explorer und .NET Framework installiert sind.
.NET Framework 1.x: Hypertextverweise für EXE-Dateien
In Version 1.0 und 1.1 des .NET Framework ist die Funktion zum Bereitstellen von Windows Forms-Anwendungen über HTTP enthalten. Im Grunde wird ein HREF-Tag verwendet, das auf eine verwaltete EXE-Datei verweist. Der Internet Explorer und die .NET Framework-Laufzeitumgebung können nicht nur die ausführbare Datei, sondern bei Bedarf auch erforderliche DLLs herunterladen. (Dieses Bereitstellungsverfahren wird im Englischen auch kurz "hrefing EXEs" genannt.)
Das folgende Beispiel zeigt ein solches Tag:
<a href="MainProject.exe">Hauptprojekt aufrufen</a>
Diese Methode ist recht einfach umzusetzen. Weitere Informationen finden Sie in den folgenden Artikeln:
Basiseinheit für die Bereitstellung ist die .NET-Assembly. Teilen Sie daher Ihre Anwendung in eine EXE-Hauptdatei und mehrere DLLs auf. Wenn Sie einfache Änderungen an einer einzelnen DLL vornehmen, müssen Sie nur diese DLL herunterladen.
So einfach es klingt, ein paar Tricks sind nötig, damit alles richtig funktioniert:
-
Das .NET Framework muss bereits auf dem Client installiert sein. (Sie können allerdings einBootstrapper-Plug-In für Microsoft Visual Studio .NET 2003 herunterladen, das die Installation des .NET Framework und Ihrer Anwendung vereinfacht.)
-
Die Anwendung wird auf dem Client als teilweise vertrauenswürdiger Code ausgeführt. Dies bietet auf der einen Seite den Vorteil, dass die Anwendung in einer Sandbox ausgeführt wird und darin begrenzt wird, welche Aktionen sie auf dem Clientcomputer durchführen kann. Wenn allerdings Funktionen wie zum Beispiel das Öffnen lokaler Dateien oder Aufrufen von einem COM-Objekt erforderlich werden, muss eine Sicherheitsrichtlinie auf dem Client eingerichtet werden. Dies ist kein einfaches Unterfangen.
-
Normalerweise versucht die ausführbare Datei, mehrere DLLs mit Lokalisierungsressourcen zu laden. In der derzeitigen Implementierung gibt es einige Probleme, die dabei zu einer verminderten Leistung führen, besonders bei langsamen Internetverbindungen.
-
Bei einer Aktualisierung wird eine Datei nach der anderen heruntergeladen. Sie können nicht sicherstellen, dass beispielsweise alle 10 aktualisierten Dateien heruntergeladen werden. Möglicherweise wird die Anwendung auf dem Client nur teilweise aktualisiert.
-
Die Anwendung ist nur dann offline verfügbar, wenn der Benutzer in Internet Explorer manuell die Option Offlinebetrieb aktiviert hat. Die Anwendung selbst kann dies nicht steuern.
-
.In der Standardeinstellung ist die mit dem Programm verbundene CONFIG-Datei nicht verfügbar. Eine Anleitung zur Lösung dieses Problems finden Sie hier (in Englisch).
-
Für die Anwendung werden keine Verknüpfungen auf dem Desktop oder im Menü Start erstellt.
Updater Application Block
Microsoft bietet mit dem Updater Application Block (UAB) (in Englisch) Lösungen für einige der oben genannten Probleme. Der UAB ist eine Bibliothek, die Sie der Anwendung hinzufügen, um den Download von Anwendungsteilen über HTTP zu verwalten.
Der UAB hat im Vergleich zur ursprünglichen Framework-Implementierung einige Vorteile:
-
Er wird als lokale Anwendung ausgeführt und ist jederzeit ohne Leistungseinbußen verfügbar.
-
Aktualisierungen sind transaktionsorientiert, d. h., dass alle Dateien einer neuen Version erfolgreich herunterzuladen sind, bevor die neue Version zur Verfügung steht.
-
Alle Anwendungsdateien sind in einem Manifest aufgelistet.
-
Der UAB wird als voll vertrauenswürdige Anwendung ausgeführt. Sie müssen sich nicht um Clientsicherheitsrichtlinien kümmern.
-
Ihre Anwendung kann Verknüpfungen im Menü Start zur Verfügung stellen.
Es gibt andererseits auch einige Nachteile:
-
Sie müssen Ihre Anwendung grundlegend ändern, damit Sie den UAB verwenden können.
-
Der UAB verwendet BITS (Background Intelligent Transfer Service - Intelligenter Hintergrundübertragungsdienst) zum Download der Anwendungsteile. Daher ist Windows 2000 oder höher erforderlich, unter Windows 98/ME kann der UAB nicht ausgeführt werden.
-
Der UAB wird als voll vertrauenswürdige, lokale Anwendung ausgeführt und ignoriert daher weitgehend Codezugriffssicherheit.
-
Microsoft bietet für den UAB keinen Support.
Weitere Informationen zum UAB finden Sie in Jamie Cools Artikel.NET Application Updater Component (in Englisch) oder unter Updater Application Block: Workspace Home (in Englisch) auf Gotdotnet. Auf http://www.gotdotnet.com/ (in Englisch) finden Sie auch ein Forum, obwohl der UAB nicht offiziell unterstützt wird. Der UAB enthält auf jeden Fall den vollständigen Quellcode, den Sie ändern können, zum Beispiel um die Beschränkung durch die Anforderung von BITS und Windows 2000 aufzuheben.
ClickOnce
Der UAB stellt eindeutig einen Zwischenschritt dar, während Microsoft die endgültige Lösung entwickelt: ClickOnce. ClickOnce bietet alle Vorteile des UAB, enthält dabei nur wenige seiner Probleme und bietet einige zusätzliche Funktionen. Einer der wesentlichen Vorteile von ClickOnce ist die Wiederherstellung der Codezugriffssicherheit.
Verglichen mit HREF EXEs hat eine ClickOnce-Anwendung folgende Vorzüge:
-
Transaktionsorientierte Aktualisierungen (d. h. vollständig oder gar nicht ausgeführt).
-
Die Anwendung funktioniert nicht nur offline, sie kann dies sogar zu einem bestimmten Grad steuern. Die Anwendung ermittelt mit APIs, ob sie online oder offline ausgeführt wird. Sie kann auch den eigenen Aktualisierungsvorgang steuern.
-
Sie ist hervorragend in Visual Studio .NET integriert, u. a. durch die Fähigkeit zum Erstellen der geeigneten zusätzlichen Dateien und Tools, die ermitteln, welche Sicherheitsberechtigungen zum Ausführen der Anwendung erforderlich sind.
-
Sie enthält eine ausführbare Win32-"Bootstrapper"-Datei, die erforderliche Komponenten herunterladen kann, sogar das .NET Framework selbst.
-
Anwendungsdateien können nach Bedarf oder stapelweise heruntergeladen werden.
-
In das Menü Start können Anwendungsverknüpfungen integriert werden.
ClickOnce ist eine Funktion von Visual Studio 2005 (früherer Codename "Whidbey") und .NET Framework 2.0. Lassen Sie uns mit der Community Preview-Version Beta 1 (Frameworkversion 2.0.40607) ein Beispiel untersuchen.
Eine ClickOnce-Anwendung
Mit den folgenden Schritten wird eine einfache ClickOnce-Anwendung erstellt:
-
Starten Sie Visual Studio 2005.
-
Klicken Sie im Menü File (Datei) auf New Project (Neues Projekt).
-
Wählen Sie eine Sprache aus (C# oder Visual Basic .NET) und anschließend Windows Application (Windows-Anwendung).
-
Geben Sie dem Projekt den Namen MyClickOnceApp und klicken Sie auf OK.
-
Fügen Sie dem Formular eine Schaltfläche hinzu und ändern Sie deren Eigenschaft Text in About (Info).
-
Doppelklicken Sie auf die Schaltfläche. Geben Sie im Codefenster Folgendes ein:
Visual Basic .NET:
MsgBox("Meine erste ClickOnce-Anwendung")
C#:
MessageBox.Show("Meine erste ClickOnce-Anwendung");
Drücken Sie die Taste F5, um die Anwendung auszuführen und zu testen.
Unter Visual Studio 2005 verwenden alle Windows-Anwendungen zum Steuern von Bereitstellungsdetails die Seite Publish (Veröffentlichen) unter Project | MyClickOnceApp Properties (Projekt | MyClickOnceApp Eigenschaften).
Abbildung 1: Konfigurieren der Einstellungen zum Veröffentlichen
Publishing Location (Veröffentlichungsort) gibt den Bereitstellungsort der Anwendung an. Dies kann, wie oben gezeigt, ein Webserver (HTTP) sein, jedoch auch ein normaler Netzwerkpfad.
Install Mode and Settings (Installationsmodus und Einstellungen) enthält verschiedene Bereitstellungsdetails, u. a.:
-
Verfügbarkeit der Anwendung nur online oder auch offline.
-
Application Files (Anwendungsdateien): Installationsort für einzelne Dateien.
-
Prerequisites (Erforderliche Komponenten): Andere erforderliche Komponenten, die von Setup installiert werden müssen, zum Beispiel Windows Installer 2.0, .NET Framework 2.0, J# Redistributable Package, SQL Server 2005 Express, Crystal Reports und Microsoft Data Access Components 2.8.
Abbildung 2: Konfigurieren der erforderlichen Komponenten
-
Updates (Aktualisierungen): Steuert, wann die Anwendung nach Updates sucht und wie diese Updates auf den Client übertragen werden.
Abbildung 3: Konfigurieren von Aktualisierungen
-
Options (Optionen): Konfiguriert Details wie zum Beispiel Anwendungssprache, Ressourcenname für die Verknüpfung im Menü Start, zur Webbereitstellung verwendete HTML-Seite und Bereitstellungsrichtlinienticket.
Abbildung 4: Konfigurieren der Optionen zum Veröffentlichen
Publish Version (Veröffentlichungsversion) passt die Versionsnummer der Anwendung an. Die Versionsnummer kann bei jeder Bereitstellung automatisch erhöht werden.
Mit dem Publish Wizard (Veröffentlichungsassistent) können Sie verschiedene Veröffentlichungsoptionen einrichten. Sie können den Assistenten auch über das Menü Build | Publish (Erstellen | Veröffentlichen) aufrufen. Alle ClickOnce-Anwendungen müssen kryptografisch signiert werden. Der Assistent fordert Sie auf, einen bestehenden Schlüssel anzugeben (empfohlen), oder generiert einen neuen Schlüssel.
Abbildung 5: Signieren der Anwendung
Nachdem Sie den Assistenten einmal ausgeführt haben, können Sie auf Publish Now (Jetzt veröffentlichen) klicken, um Aktualisierungen zu veröffentlichen. In unserem Beispiel wird eine Webseite angezeigt.
Abbildung 6: Veröffentlichte Anwendung
Die Webseite enthält ein Skript, das überprüft, welches zusätzliche Paket mit erforderlichen Komponenten installiert werden muss, bevor die Anwendung installiert wird. Wenn eine erforderliche Komponente fehlt, wird sie beim ersten Ausführen der Anwendung installiert.
Nachdem die Benutzer auf den Link Install (Installieren) geklickt haben, kann zumindest beim ersten Ausführen der Anwendung in mehreren Dialogfeldern eine Benutzereingabe erforderlich sein:
Bereitstellungsdetails
Visual Studio .NET 2005 erstellt für die Anwendung eine neue Struktur mit mehreren Dateien und Verzeichnissen.
Abbildung 7: Bereitstellungsverzeichnisse
Das Verzeichnis dotnetfx enthält die zur Weitergabe vorgesehene .NET Framework-Datei, derzeit 25 MB.
Visual Studio erhöht die Versionsnummer in der Standardeinstellung bei jeder Bereitstellung. Für jede Version wird ein neuer Ordner mit der entsprechenden ansteigenden Versionsnummer angelegt.
Die Datei .application ist das Ziel für den Link auf der HTML-Seite publish.htm. Die XML-Datei enthält Informationen wie beispielsweise das entsprechende Verzeichnis der aktuellen Anwendungsversion sowie digitale Signaturen.
Die Webseite Publish.htm enthält neben dem Link zur Datei .application auch Clientskriptcode zum Überprüfen von Versionen und entsprechenden Anzeigen von Meldungen. Ist zum Beispiel auf einem Computer das .NET Framework nicht installiert, wird eine andere Meldung unter Install MyClickOnceApp (MyClickOnceApp installieren) angezeigt.
Die ausführbare Win32-Datei Setup.exe kann nicht nur die Anwendung installieren, sondern auch alle benötigten Komponenten wie beispielsweise das .NET Framework selbst und MDAC 2.8 in der korrekten Reihenfolge.
Jeder Anwendungsordner enthält die Anwendungsdateien und außerdem eine Manifestdatei. Das Manifest ist eine XML-Datei, die im Grunde folgende Informationen enthält:
-
Genaue Bezeichnung aller Anwendungsdateien. Diese Bezeichnung besteht aus dem Dateinamen, Versionsnummer, Kultur und Prozessorarchitektur (in unserem Fall "msil").
-
Alle für die Anwendung erforderlichen Berechtigungen.
-
Digitale Signaturen.
Ausführen der Anwendung
Nach dem Download der Anwendung können Sie diese ausführen, ohne sie erneut herunterladen zu müssen. In unserem Beispiel kann die Anwendung durch Klicken auf den Link zur Webseite gestartet werden, oder mit der Verknüpfung im Menü Start. In beiden Fällen wird gemäß den Einstellungen der Projektoptionen im Dialogfeld Application Updates (Anwendungsaktualisierungen) nach einer neuen Version gesucht. Gegebenenfalls wird eine neue Version heruntergeladen.
Führen Sie die folgenden Schritte aus, um die Aktualisierungsfunktion zu prüfen:
-
Führen Sie eine sichtbare Änderung an der Anwendung aus. Sie können beispielsweise eine Schaltfläche im Formular verschieben.
-
Erstellen Sie die Anwendung erneut und stellen Sie sie erneut bereit.
-
Führen Sie die Anwendung aus und prüfen Sie den Downloadvorgang.
Grundlage dieser Informationen ist die Beta 1-Version von Visual Studio .NET, neuere Versionen bieten möglicherweise andere Funktionen.
Vergleichstabelle
| | HREF .EXE | UAB | ClickOnce |
| Keine Änderung der Anwendung erforderlich | X | | X |
| Isolierung der Anwendung | X | | X |
| Vollständige Unterstützung | X | | X |
| Geringe Systemauswirkungen | X | | X |
| Beibehalten der Codezugriffssicherheit | X | | X |
| Dateidownload bei Bedarf | X | | X |
| Manifeste mit deklarativer Liste der erforderlichen Dateien | | X | X |
| Kryptografisch signierte Manifeste | | | X |
| Dateidownload in Stapeln | | X | X |
| Offlinebearbeitung | (*) | X | X |
| Transaktionsorientierte Installationen | | X | X |
| Optimale Leistung | | X | X |
| Windows 2000 oder höher erforderlich | | X | (**) |
| Windows-Shellintegration | | X | X |
| Gute Steuerung des Aktualisierungsverfahrens | | X | X |
| API zur Offlinebearbeitung und Steuerung des Downloadvorgangs | | | X |
| Automatisches Installieren optionaler Pakete | | | X |
(*) Benutzereingabe erforderlich
(**) Für das Betaprodukt noch keine Aussage möglich
Schlussbemerkung
ClickOnce ist eine sehr leistungsstarke Technologie für die Anwendungsbereitstellung. Sie stellt die natürliche Weiterentwicklung der vorher verfügbaren Bereitstellungsmodelle dar. ClickOnce kombiniert Stabilität, Sicherheit, Leistung und Flexibilität zur vielfältigen Clienterfahrung von Windows Forms-Anwendungen.
Mauro Sant'Anna (mas_mauro@hotmail.com) ist Microsoft Regional Director, MCSD, MCSE, Entwickler und Kursleiter. Von .NET ist er bereits seit der öffentlichen Vorstellung bei der PDC 2000 in Orlando vollständig überzeugt.