Zum Inhalt springen

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 -w entfernt Symboltabellen und Debug-Informationen und verkleinert so die Binärdatei.
  • Für eine GUI-App (Fyne, Wails, Walk, ein Webview) fügen Sie -H windowsgui innerhalb von -ldflags hinzu, damit sich kein Konsolenfenster öffnet: -ldflags "-s -w -H windowsgui".
  • Setzen Sie GOARCH=386 für einen 32-Bit-Build und arm64 fü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 von main.rs hinzu, um das Konsolenfenster zu unterdrücken.
  • Um Icon und Versionsinformationen einzubetten, verwenden Sie das Crate winres oder embed-resource aus build.rs mit einer .rc-Datei, die auf app.ico verweist.
  • Setzen Sie opt-level = "z", lto = true und strip = true im 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 PATH hinzu. 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