C#-Desktop-Anwendungen mit Velopack schnell bereitstellen und aktualisieren
Das Bereitstellen und Aktualisieren von plattformübergreifenden Desktop-Anwendungen ist traditionell einer der frustrierendsten Teile der Entwicklung. Aber wie Tim Corey in seinem Video "Deploy and Update C# Desktop Apps Fast with Velopack" erklärt, kann dieser Prozess jetzt extrem einfach sein.
Mit Velopack, einem fantastischen Tool, das alles vom Erstellen von Paketen bis zur Anwendung von Updates abdeckt, können Entwickler jetzt ihre Anwendungen mit nur einem Befehl erstellen, bereitstellen und warten - ohne komplexe Build-Pipelines oder endlose Konfigurationsdateien.
In diesem Artikel gehen wir das gesamte 32-minütige Tutorial von Tim detailliert durch und zeigen, wie man mit Velopack eine Standard-C#-WPF-Anwendung in ein sich selbst aktualisierendes portables Paket verwandelt. Wir werden auch sehen, wie es automatische Migrationen, Code Signing und Zero-Config-Setup für mehrere Plattformen unterstützt - und das alles unter Beibehaltung der nativen Leistung.
Einführung: Warum Velopack?
Zu Beginn erklärt Tim, dass das Bereitstellen und Aktualisieren von Desktop-Anwendungen nicht schwierig sein muss - im Gegenteil, es kann geradezu "einfach" sein In diesem Video zeigt er, wie Velopack den Prozess vereinfachen kann, indem es eine WPF-Anwendung verpackt, ein Installationsprogramm erstellt und automatische Updates mit minimaler Konfiguration ermöglicht.
Er betont, dass dies nicht auf WPF beschränkt ist - der gleiche Prozess funktioniert auch für WinForms, Konsolenanwendungen oder sogar Nicht-.NET-Software wie Java, Rust oder C++. Velopack unterstützt die Erstellung von Paketen für nahezu jede Sprache oder jedes Framework und ist damit eines der besten Installations-Frameworks für plattformübergreifende Anwendungen, die derzeit verfügbar sind.
Erstellen des WPF-Projekts
Tim beginnt in Visual Studio 2022 und erstellt ein einfaches WPF-Projekt namens DeployDemo. Das Projekt zielt auf .NET 9 ab, aber wie er betont, funktioniert es auch mit neueren Versionen wie .NET 10 perfekt.
Bei diesem ersten Build handelt es sich nur um eine kleine Anwendung zur Demonstration des vollständigen Bereitstellungs- und Aktualisierungsprozesses. Obwohl er WPF verwendet, wiederholt er, dass Velopack ebenso gut für plattformübergreifende Desktop-Anwendungen funktioniert, was es zu einem einzigen Lösungsansatz für alle Arten von .NET- und sogar Nicht-.NET-Projekten macht.
Velopack als globales Werkzeug installieren
Als Nächstes öffnet Tim das Terminal und tippt:
dotnet tool install -g vpk
Mit diesem einzigen Befehl wird Velopack global auf dem System installiert, so dass Entwickler Velopack-Befehle von überall aus ausführen können.
Tim nennt dies den Schritt der "geheimen Soße", da Velopack die Compiler-Ausgabe Ihres Projekts in ein sich selbst aktualisierendes portables Paket umwandelt. Mit diesem Schritt erhält Ihre Anwendung ein professionelles Installationsprogramm und ein automatisches Update-Framework - alles in einem.
Er erklärt, dass die Kommandozeile nicht nur die Einrichtung vereinfacht, sondern sich auch leicht in CI/CD-Pipelines integrieren lässt, so dass Entwickler das Paketieren, Erstellen von Releases und die Bereitstellung ohne zusätzliche Skripte automatisieren können. Die Möglichkeit, mit nur einem Befehl zu automatisieren, bedeutet, dass Entwickler wertvolle Zeit sparen können und gleichzeitig konsistente Builds erhalten.
Installation des Velopack NuGet-Pakets
In Visual Studio öffnet Tim die Option NuGet-Pakete verwalten und installiert das Velopack-Paket.
Er erklärt, dass Velopack der Nachfolger von Squirrel ist, einem früher sehr beliebten Installer-Framework. Wenn Sie Squirrel verwendet haben, kann Velopack Ihr bestehendes Setup automatisch migrieren und bietet so eine höhere Zuverlässigkeit, deutlich schnellere Builds und eine bessere plattformübergreifende Kompatibilität.
Velopack kann Desktop-Installationsprogramme für Windows, Linux und macOS erstellen, die verschiedene Programmiersprachen wie C#, Rust, C++ und JavaScript unterstützen. Es handelt sich um ein Framework für die plattformübergreifende Bereitstellung von Anwendungen, das fabelhaft systemübergreifend funktioniert.
Tim betont, dass die Nutzung von Velopack völlig kostenlos ist - es fallen keine Abonnement- oder Lizenzgebühren an, und dennoch liefert es professionelle Installations-Frameworks, die mit kommerziellen Lösungen vergleichbar sind.
Initialisierung von Velopack im Code
In der Datei App.xaml.cs fügt Tim einen Konstruktor hinzu und initialisiert Velopack mit nur ein paar Zeilen Code:
new VelopackApp()
.Build()
.Run();
new VelopackApp()
.Build()
.Run();
Diese Null-Konfigurations-Einrichtung verbindet die App sofort mit dem automatischen Update-Framework von Velopack. Zwar wird damit noch nicht nach Updates gesucht, aber das ist es, was die Leistung von Velopack in späteren Schritten ermöglicht, wenn es mit der Verwaltung von Updates und Installationen beginnt.
Tim erklärt, dass diese Einrichtung zwar einfach, aber leistungsstark genug ist, um die App selbst zu aktualisieren und sicherzustellen, dass die Benutzer immer die neueste Version auf dem Rechner ihres Endbenutzers ausführen.
Gestaltung der Benutzeroberfläche
Bevor er tiefer in die Aktualisierungen eintaucht, erstellt Tim eine grundlegende WPF-Oberfläche. Er erstellt ein Rasterlayout und platziert eine Aktualisierungsschaltfläche oben rechts.
Zunächst verursacht ein falsch platziertes Element einen Fehler, aber Tim nutzt ihn, um die Betrachter daran zu erinnern, wie wichtig die Layout-Hierarchie in WPF ist. Nach der Korrektur sieht die Oberfläche der installierbaren Anwendung sauber und größenveränderbar aus und zeigt, wie gut Velopack mit gängigen Frameworks wie WPF zusammenarbeitet.
Anschließend fügt er ein StackPanel hinzu, das ein Textfeld (mainTextBox) und eine Submit-Schaltfläche (submitButton) enthält. Wenn die App ausgeführt wird, zeigt sie eine minimale, funktionierende Benutzeroberfläche an. Dieses kleine Projekt wird später dazu dienen, die automatische Anwendung von Updates zu demonstrieren.
Implementierung der Aktualisierungsschaltfläche
Jetzt geht Tim zur Funktionalität über. Er klickt doppelt auf die Schaltfläche "Aktualisieren", um das Klickereignis zu erzeugen. Dies wird das Herzstück des Auto-Update-Frameworks sein.
Er erklärt, dass man den Prozess in drei Phasen unterteilen könnte - Prüfen, Herunterladen und Anwenden von Updates -, aber für diese Demo fasst er alle drei in einem Ereignis zusammen, um es einfach zu machen.
Schreiben der Aktualisierungslogik
In MainWindow.xaml.cs erstellt Tim einen neuen UpdateManager und verweist ihn auf einen lokalen Pfad, der als Update-Quelle dienen soll:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");
In der Praxis könnte dieser Pfad eine HTTPS-URL für eine nach außen gerichtete Anwendung oder eine lokale Dateifreigabe für die interne Verteilung sein. Velopack erfordert keine umfangreiche Konfiguration - es funktioniert nahtlos in beiden Umgebungen.
Anschließend fügt Tim asynchronen Code hinzu, um Versionsprüfungen und Aktualisierungen zu ermöglichen:
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);
Dieser Code prüft, ob eine neuere Version vorliegt, lädt Delta-Pakete herunter und wendet sie sofort an. Velopack kümmert sich um alles - die App startet automatisch neu, sobald die Aktualisierung abgeschlossen ist.
Er erklärt, dass diese Demo zwar auf Knopfdruck funktioniert, Entwickler diese Updates aber auch stillschweigend oder automatisch beim Start auslösen können, genau wie bei professioneller Software.
Veröffentlichung der Anwendung
Als Nächstes demonstriert Tim, wie man die erste Version veröffentlicht. Er verwendet das Terminal im Projektordner und führt es aus:
dotnet publish --self-contained -r win-x64 -o ./publish
Dadurch wird ein in sich geschlossenes Build erzeugt, das die .NET-Laufzeitumgebung enthält. Das bedeutet, dass die Anwendung auf jedem Endbenutzerrechner ausgeführt werden kann, ohne dass .NET separat installiert werden muss.
Tim zeigt die kompilierte Ausgabe - die Datei DeployDemo.exe - im Veröffentlichungsverzeichnis und bestätigt, dass sie korrekt ausgeführt wird. Zum jetzigen Zeitpunkt handelt es sich nur um die Compiler-Ausgabe - noch nicht um eine verpackte, installierbare Version.
Erstellen des Installer-Pakets
Um die veröffentlichten Dateien in ein verteilbares Installationsprogramm zu verwandeln, verwendet Tim den Pack-Befehl von Velopack:
vpk pack --pack-id DeployDemo --pack-version 1.0.0 --pack-directory ./publish
Es wird ein Ordner "Releases" erstellt, der alle erforderlichen Dateien enthält, einschließlich der ausführbaren Setup-Dateien.
Tim kopiert die Versionsdateien in einen lokalen "Server"-Ordner. Durch Ausführen der generierten Setup-Datei wird die Anwendung vollständig installiert - es werden Verknüpfungen erstellt, ein Eintrag in der Liste "Programme und Funktionen" hinzugefügt und eine native Installation ohne zusätzliche Berechtigungen oder UAC-Eingabeaufforderungen durchgeführt.
Jetzt ist die App eine offizielle installierbare Anwendung, die von Velopack unterstützt wird.
Aktualisierung der Anwendung
Um eine Aktualisierung zu simulieren, ändert Tim den Code der Submit-Schaltfläche:
MessageBox.Show($"Hello {mainTextBox.Text}");
MessageBox.Show($"Hello {mainTextBox.Text}");
Anschließend packt er die Anwendung neu, indem er die gleichen Befehle zum Veröffentlichen und Packen wiederholt, jedoch mit einer aktualisierten Versionsnummer:
vpk pack --pack-id DeployDemo --pack-version 1.0.1 --pack-directory ./publish
Velopack erstellt automatisch Delta-Pakete (kleine Differenzdateien für bestehende Benutzer) und ein vollständiges Paket für neue Installationen. Tim merkt an, dass das vollständige Paket etwa 63 MB groß ist, während das Delta-Paket nur 132 KB groß ist - ein Beweis dafür, dass Velopack deutlich schneller und effizienter ist als andere Tools oder Installer-Frameworks.
Er kopiert die neuen Versionen in den Server-Ordner und erstellt so effektiv Versionen für 1.0.1.
Anwendung des Updates
Tim öffnet die installierte Anwendung erneut und klickt auf die Schaltfläche Aktualisieren. In Sekundenschnelle lädt Velopack das Update 1.0.1 herunter und wendet es an, wobei die App automatisch neu gestartet wird.
Wenn er seinen Namen eintippt und auf "Senden" drückt, steht jetzt "Hallo Tim" Das Update-Framework funktionierte blitzschnell und bestätigte, dass Velopack sich problemlos integrieren lässt und den gesamten Update-Zyklus fehlerfrei abwickelt.
Er weist darauf hin, dass Entwickler diese Versionen auf Azure, in einem Dateispeicher oder in einem Web-Repository hosten könnten und die gleiche automatische Aktualisierungslogik auch unter Windows, Linux oder macOS funktionieren würde.
Vereinfachte Wartung und Flexibilität
Tim hebt hervor, wie dieser Prozess die Wartung von Desktop-Anwendungen extrem vereinfacht. Entwickler können interne Tools oder öffentliche Software mit vollständiger automatischer Update-Funktionalität mit minimaler Konfiguration und ohne externe Abhängigkeiten bereitstellen.
Velopack bietet eine vertraute API for .NET-Entwickler und übernimmt jeden Schritt:
-
Veröffentlichung von Builds
-
Pakete erstellen
-
Freigaben erstellen
-
Aktualisierungen anwenden
- Saubere Deinstallation
All dies geschieht, ohne dass eine komplexe Build-Pipeline oder umfangreiche Konfigurationsdateien erforderlich sind.
Tim bezeichnet Velopack als ein fantastisches Tool, das Entwicklern hilft, wertvolle Zeit zu sparen und gleichzeitig eine ausgefeilte, professionelle Software zu liefern. Es handelt sich um ein Framework für plattformübergreifende Updates, das "einfach funktioniert"
Deinstallation und Versionsverfolgung
Tim demonstriert, dass die installierte Anwendung in der Windows-Liste "Programm deinstallieren oder ändern" erscheint und die Version 1.0.1 anzeigt. Die Deinstallation ist nahtlos - Velopack löscht einfach den Ordner, ohne Rückstände zu hinterlassen.
Er fügt hinzu, dass Velopack nicht nur für WPF, sondern auch für WinForms, UNO Platform und sogar für ältere .NET Framework 4.6.2-Projekte fabelhaft funktioniert. Sie ist auch mit anderen gängigen Frameworks und Sprachen wie Rust oder JavaScript kompatibel, was sie zu einer universellen Lösung für plattformübergreifende Installationsprogramme macht.
Abschluss
Abschließend drückt Tim aus, wie sehr er von der Leistung von Velopack beeindruckt ist. Mit nur wenigen Schritten - der Installation des Tools, dem Hinzufügen einer Codezeile und dem Ausführen von zwei Befehlen - können Entwickler aus einem einfachen .NET-Projekt eine vollständig installierbare, selbst aktualisierende, plattformübergreifende Anwendung erstellen.
Er bedankt sich bei den Velopack-Entwicklern für ihre großartige Arbeit und bezeichnet es als das wahrscheinlich beste Installations- und Update-Framework für plattformübergreifende Desktop-Anwendungen, das derzeit erhältlich ist.
Abschließend erinnert Tim die Zuschauer daran, dass alle Details, Befehle und der Quellcode in der Videobeschreibung zu finden sind. Er ermutigt Entwickler dazu, Ideen zu diskutieren, Funktionen anzufordern und über das öffentliche Repository des Projekts zur Zukunft beizutragen.
