Windows-Installer für Go- und Rust-Apps (von jedem OS aus kompiliert)
Kompilieren Sie ein Go- oder Rust-Programm per Cross-Compiling für Windows, betten Sie ein Icon ein, verbergen Sie die Konsole bei GUI-Apps und packen Sie die einzelne .exe (plus Assets) in eine Setup.exe mit Verknüpfungen und Deinstaller.
Aktualisiert am 31. Oktober 2026 · 3 Min. Lesezeit
Go und Rust erzeugen beide eine einzelne statische .exe für Windows, auch auf einem Mac oder einer Linux-Maschine, und das macht einen Großteil ihres Reizes für Desktop-Tools aus. Trotzdem erwarten Nutzer, diese .exe zu installieren, statt sie im Downloads-Ordner liegen zu lassen. Diese Anleitung behandelt die Build-Flags, auf die es ankommt, und zeigt, wie Sie aus der Binärdatei eine Setup.exe machen, ohne Windows anzufassen, bis es ans Testen geht.
Go
Cross-kompilieren Sie mit dem Ziel in den Umgebungsvariablen:
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o MyApp.exe .
-s -wentfernt Symboltabellen und Debug-Informationen und verkleinert so die Binärdatei.- Für eine GUI-App (Fyne, Wails, Walk, ein Webview) fügen Sie
-H windowsguiinnerhalb von-ldflagshinzu, damit sich kein Konsolenfenster öffnet:-ldflags "-s -w -H windowsgui". - Setzen Sie
GOARCH=386für einen 32-Bit-Build undarm64für Windows on ARM.
Icon und Versionsinformationen. Go bietet keine eingebaute Möglichkeit, ein Windows-Icon einzubetten. go-winres erzeugt aus einer kleinen JSON-Beschreibung und Ihrer .ico eine .syso-Ressourcendatei; legen Sie die .syso ins Package, und go build nimmt sie automatisch mit. Ohne sie zeigt die .exe das generische Icon, die Verknüpfungen des Installers verwenden aber trotzdem das Icon, das Sie hochladen.
Rust
Unter Windows genügt das Standardziel:
cargo build --release
Von macOS oder Linux aus verwenden Sie die GNU-Toolchain als Ziel, die mit installiertem MinGW cross-kompiliert:
rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu
cargo-xwin ist eine Alternative, die für das MSVC-Ziel cross-kompiliert.
- Für eine GUI-App fügen Sie
#![windows_subsystem = "windows"]am Anfang vonmain.rshinzu, um das Konsolenfenster zu unterdrücken. - Um Icon und Versionsinformationen einzubetten, verwenden Sie das Crate
winresoderembed-resourceausbuild.rsmit einer.rc-Datei, die aufapp.icoverweist. - Setzen Sie
opt-level = "z",lto = trueundstrip = trueim Release-Profil, um eine kleinere Binärdatei zu erhalten.
Was Sie hochladen
Eine einzelne .exe: Laden Sie sie direkt bei ExeTup hoch; ein Zip ist nicht nötig. Der Installer gibt ihr einen Platz in Program Files (oder pro Benutzer), Verknüpfungen und einen Deinstaller.
Eine .exe plus Assets (eine Konfigurationsvorlage, Web-Assets für eine Webview-App, ein data/-Ordner): Packen Sie alles zusammen in ein Zip mit der Ordnerstruktur, die das Programm zur Laufzeit erwartet, und laden Sie das Zip hoch. Alternativ laden Sie die .exe hoch und fügen die Extras im Schritt „Weitere Dateien“ hinzu; in beiden Fällen landen sie neben dem Programm.
Geben Sie dann Name, Version und Herausgeber ein, wählen Sie Installationsbereich und Architektur, laden Sie die .ico hoch und starten Sie den Build. Testen Sie das Ergebnis unter Windows; siehe Möglichkeiten zum Testen ohne Windows-PC.
Kommandozeilen-Tools
Installer sind für Desktop-Apps gedacht, aber auch ein CLI profitiert: ein bekannter Speicherort, ein Eintrag zum Deinstallieren und eine stille Bereitstellung mit /S für IT-Teams. Zwei Einschränkungen:
- Der Installer fügt den Ordner nicht zu
PATHhinzu. Nennen Sie den Nutzern den Installationsordner, oder lassen Sie das Tool beim ersten Start anbieten, sich selbst einzutragen. - Installationen pro Benutzer landen in
%LOCALAPPDATA%\Programs\MyApp, worauf Nutzer ohne Administratorrechte zugreifen können.
Für Tools, die sich an Entwickler richten, passen winget- oder scoop-Manifeste womöglich besser zu Ihrem Publikum als ein Installer; sie können auf dieselbe signierte .exe verweisen.
Hinweise
- Antivirus-Heuristiken. Frische, unsignierte, statisch gelinkte Binärdateien aus Go und Rust lösen manchmal heuristische Scanner aus. Ein Installer, der das Programm in Program Files ablegt, hilft ein wenig; Code-Signierung hilft deutlich. Siehe die SmartScreen-Anleitung.
- Keine Runtime, keine Voraussetzungen. Beide Sprachen linken ihre Runtime mit ein. Der Installer liefert die Binärdatei unverändert aus.
- Updates. Ein neuer Installer mit höherer Versionsnummer ersetzt die Dateien an Ort und Stelle.
Häufige Fragen
Kann ich nur die .exe hochladen?
Ja. Eine einzelne .exe wird für sich allein akzeptiert, und der Installer stellt trotzdem Verknüpfungen, einen Deinstaller und den Eintrag in den Windows-Einstellungen bereit.
Brauche ich Windows, um den Installer zu erstellen?
Nein. Bauen Sie die Binärdatei auf Ihrem OS, laden Sie sie hoch, und ExeTup kompiliert den Installer in der Cloud. Windows wird nur zum Testen des Ergebnisses benötigt.
Warum öffnet meine Go-GUI-App ein schwarzes Konsolenfenster?
Bauen Sie mit -ldflags "-H windowsgui". In Rust fügen Sie #![windows_subsystem = "windows"] zu main.rs hinzu.
Wie bekomme ich mein Icon auf die .exe selbst?
Betten Sie es als Windows-Ressource ein: go-winres für Go, das Crate winres oder embed-resource für Rust. Laden Sie dieselbe .ico bei ExeTup für den Installer und die Verknüpfungen hoch.
Verwandte Anleitungen
- Windows-Installer auf dem Mac oder unter Linux erstellenIhre Möglichkeiten, eine Setup.exe zu bauen, wenn Sie unter macOS oder Linux entwickeln – vom Cross-Kompilieren mit NSIS bis zum Build rein im Browser – und wie Sie das Ergebnis ohne eigenen Windows-PC testen.
- Eine .exe in einen Windows-Installer verwandeln (exe zu Setup.exe)So machen Sie aus einer einzelnen .exe oder einem Ordner mit einer .exe einen echten Windows-Installer mit Verknüpfungen und Deinstaller, ohne ein Installer-Skript zu schreiben.
- Setup.exe still installieren: /S-Schalter, eigener Ordner und RolloutSo führen Sie eine NSIS-basierte Setup.exe mit /S still aus, wählen den Ordner mit /D=, deinstallieren ohne Dialoge und verteilen den Installer mit Intune, PDQ oder per Skript.