Windows-Installer für eine .NET-App erstellen (WPF, WinForms, Konsole)
Veröffentlichen Sie eine .NET-Desktop-App mit dotnet publish, wählen Sie zwischen frameworkabhängig und eigenständig und packen Sie den Publish-Ordner in eine Setup.exe mit Verknüpfungen und Deinstaller.
Aktualisiert am 31. Oktober 2026 · 3 Min. Lesezeit
Visual Studio baut Ihre WPF- oder WinForms-App, und dotnet publish liefert einen Ordner, der überall läuft. Was fehlt, ist der Installer: der Eintrag im Startmenü, der Ordner unter Program Files, der Deinstallationseintrag in den Windows-Einstellungen. Die alten ClickOnce und Visual Studio Installer Projects gibt es noch, aber beiden sieht man ihr Alter an. Hier ist der direkte Weg vom .NET-Projekt zur Setup.exe.
Schritt 1: App veröffentlichen
Das Veröffentlichen erzeugt einen Ordner mit allem, was die App braucht. Führen Sie den Befehl im Projektordner aus:
dotnet publish -c Release -r win-x64 --self-contained true
Die Ausgabe landet unter bin\Release\net8.0-windows\win-x64\publish\ (das Zielframework im Pfad hängt von Ihrem Projekt ab). Dieser Ordner ist das, was Sie ausliefern.
Die eine Entscheidung, auf die es ankommt:
- Eigenständig (
--self-contained true) bündelt die .NET-Laufzeit. Der Ordner ist 70 bis 150 MB groß, läuft aber auf jedem Windows-Rechner, ohne dass vorher etwas installiert werden muss. Wählen Sie dies für Software, die Sie an die Öffentlichkeit verteilen. - Frameworkabhängig (
--self-contained false) ist nur wenige MB groß, aber der Nutzer muss die passende .NET Desktop Runtime installiert haben, sonst zeigt die App beim ersten Start eine Download-Aufforderung. Geeignet für interne Tools auf verwalteten Rechnern.
Nützliche Optionen:
-p:PublishReadyToRun=truekompiliert die App vorab für einen schnelleren Start.-p:PublishSingleFile=truefasst die Ausgabe in einer einzigen.exezusammen. Das funktioniert, aber ein Installer nimmt dem den Grund, und Einzeldatei-Apps entpacken native Bibliotheken beim ersten Start. Der normale Ordner ist einfacher.- Trimming (
PublishTrimmed) wird für WPF und WinForms nicht unterstützt; lassen Sie es aus.
Legen Sie das App-Symbol in der Projektdatei fest, damit die veröffentlichte .exe es trägt:
<PropertyGroup>
<ApplicationIcon>app.ico</ApplicationIcon>
</PropertyGroup>
Starten Sie die veröffentlichte .exe einmal aus dem Publish-Ordner, idealerweise auf einem Rechner ohne Visual Studio, um sicherzugehen, dass nichts fehlt.
Schritt 2: Publish-Ordner zippen
Zippen Sie den Inhalt von publish`: die .exe, die DLLs, .deps.json, .runtimeconfig.json und etwaige Inhaltsdateien. Lassen Sie .pdb`-Dateien weg, es sei denn, Sie möchten Absturzsymbole auf den Rechnern Ihrer Kunden.
Schritt 3: Installer bauen
- Laden Sie die Zip-Datei bei ExeTup hoch. Es wählt die
.exeIhrer App als Hauptprogramm; bestätigen Sie das, denn eine eigenständige Veröffentlichung enthältcreatedump.exe, und das ist es nicht. - Tragen Sie Name, Version (halten Sie sie mit
<Version>im Projekt synchron), Herausgeber und Lizenz ein. - Wählen Sie alle Benutzer für eine klassische Desktop-App unter Program Files oder aktueller Benutzer, wenn Kunden möglicherweise keine Administratorrechte haben.
- Behalten Sie 64-Bit für eine
win-x64-Veröffentlichung bei; wählen Sie 32-Bit fürwin-x86. - Laden Sie dieselbe
app.icohoch, aktivieren Sie die Verknüpfungen und starten Sie den Build.
Laden Sie die Setup.exe herunter und testen Sie Installation und Deinstallation unter Windows.
Hinweise speziell zu .NET
- Updates. Liefern Sie einen neuen Installer mit höherer Version aus. Die Installation über die alte Version ersetzt die Dateien; einen Auto-Update-Kanal enthält der Installer nicht.
- Einstellungen und Daten. Schreiben Sie Nutzerdaten nach
%APPDATA%oder%LOCALAPPDATA%, nicht neben die.exe. Program Files ist für normale Nutzer schreibgeschützt, und der Deinstaller entfernt nur, was er installiert hat. - Voraussetzungen. Eigenständige Veröffentlichungen brauchen nichts weiter. Benötigt Ihre App die Visual-C++-Laufzeit oder einen Datenbanktreiber, dokumentieren Sie das; der Installer kettet keine anderen Installer an.
- Codesignatur. Signieren Sie die veröffentlichte
.exevor dem Zippen und anschließend die heruntergeladeneSetup.exe. Siehe den SmartScreen-Leitfaden.
Alternativen
- Visual Studio Installer Projects erzeugen MSI-Dateien direkt aus Visual Studio heraus. Weiterhin als Erweiterung verfügbar, eingeschränkt und umständlich bei eigenständigen Veröffentlichungen.
- ClickOnce bietet Installationen pro Benutzer mit Auto-Update, gebunden an einen Webserver, den Sie betreiben.
- WiX Toolset baut MSI-Dateien aus XML und ist der Standard für MSI-Paketierung auf Unternehmensniveau. Mächtig, mit entsprechend steiler Lernkurve.
- MSIX ist Microsofts neueres Paketformat, am besten geeignet, wenn Sie den Microsoft Store anvisieren.
Wann das Format eine Rolle spielt, lesen Sie unter MSI- vs. EXE-Installer.
Häufige Fragen
Soll ich frameworkabhängig oder eigenständig veröffentlichen?
Eigenständig für alles, was Sie an die Öffentlichkeit geben, damit die App ohne Laufzeit-Download läuft. Frameworkabhängig für interne Tools auf Rechnern, auf denen die IT die .NET-Laufzeit verwaltet.
Enthält der Installer die .NET-Laufzeit?
Wenn Sie eigenständig veröffentlichen, ja, denn sie ist Teil des Publish-Ordners. Der Installer liefert aus, was in der Zip-Datei steckt.
Kann ich ein MSI für Gruppenrichtlinien erzeugen?
ExeTup baut eine Setup.exe. Sie installiert sich mit /S unbeaufsichtigt, was die meisten skriptgesteuerten Bereitstellungen abdeckt. Für Richtlinien, die ausschließlich MSI akzeptieren, ist WiX das richtige Werkzeug.
Mit welchen .NET-Versionen funktioniert das?
Mit allen, die einen Publish-Ordner erzeugen: .NET 6, 7, 8, 9 und neuer sowie .NET-Framework-Apps, die mit Visual Studio gebaut wurden (verwenden Sie die Ausgabe unter bin\Release).
Verwandte Anleitungen
- So erstellen Sie eine Setup.exe für Ihre Windows-App (ohne Code)Was eine Setup.exe tatsächlich tut, drei Wege, eine zu erstellen, und wie Sie den Ordner Ihrer App in Minuten in ein professionelles Installationsprogramm verwandeln, ohne ein Installationsskript zu schreiben.
- MSI oder EXE: Welchen Installer sollte Ihre Windows-App ausliefern?Die tatsächlichen Unterschiede zwischen einem MSI-Paket und einer Setup.exe, wann IT-Abteilungen wirklich MSI brauchen, wo MSIX hingehört und warum die meisten Desktop-Apps als EXE ausgeliefert werden.
- „Der Computer wurde durch Windows geschützt“: Was die SmartScreen-Warnung bedeutet und wie sie verschwindetWarum Windows bei einem neuen Installer die Warnung „Unbekannter Herausgeber“ zeigt, was Nutzer anklicken können und wie Codesignatur und Reputation sie verschwinden lassen.