Установщик Windows для приложения на Go или Rust (сборка из любой ОС)
Кросс-компилируйте программу на Go или Rust под Windows, встройте иконку, скройте консоль для GUI-приложений и упакуйте единственный .exe (вместе с ресурсами) в Setup.exe с ярлыками и деинсталлятором.
Обновлено 31 октября 2026 г. · 3 мин чтения
Go и Rust собирают единственный статический .exe для Windows прямо на Mac или Linux-машине, и во многом именно этим они привлекательны для настольных утилит. Но пользователи всё равно ожидают, что этот .exe можно установить, а не держать в папке «Загрузки». В этом руководстве разобраны важные флаги сборки и то, как превратить бинарник в Setup.exe, не прикасаясь к Windows до самого тестирования.
Go
Кросс-компилируйте, задав целевую платформу через переменные окружения:
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o MyApp.exe .
-s -wудаляет таблицы символов и отладочную информацию, уменьшая размер бинарника.- Для GUI-приложения (Fyne, Wails, Walk, webview) добавьте
-H windowsguiвнутрь-ldflags, чтобы не открывалось окно консоли:-ldflags "-s -w -H windowsgui". - Укажите
GOARCH=386для 32-битной сборки иarm64для Windows на ARM.
Иконка и информация о версии. В Go нет встроенного способа добавить иконку Windows. go-winres генерирует файл ресурсов .syso из небольшого JSON-описания и вашего .ico; положите .syso в пакет, и go build подхватит его автоматически. Без него .exe будет показывать стандартную иконку, хотя ярлыки установщика всё равно будут использовать ту иконку, которую вы загрузите.
Rust
На Windows достаточно цели по умолчанию:
cargo build --release
Из macOS или Linux собирайте под GNU-тулчейн, который кросс-компилирует при установленном MinGW:
rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu
cargo-xwin — альтернатива, которая кросс-компилирует под цель MSVC.
- Для GUI-приложения добавьте
#![windows_subsystem = "windows"]в началоmain.rs, чтобы скрыть окно консоли. - Чтобы встроить иконку и информацию о версии, используйте crate
winresилиembed-resourceизbuild.rsс файлом.rc, ссылающимся наapp.ico. - Задайте
opt-level = "z",lto = trueиstrip = trueв release-профиле, чтобы уменьшить бинарник.
Что загружать
Единственный .exe: загрузите его в ExeTup напрямую; zip не нужен. Установщик выделит ему место в Program Files (или в пользовательском каталоге), создаст ярлыки и деинсталлятор.
.exe плюс ресурсы (шаблон конфигурации, веб-ресурсы для webview-приложения, папка data/): упакуйте их в zip с той структурой папок, которую программа ожидает во время работы, и загрузите zip. Либо загрузите .exe и добавьте остальное на шаге «Другие файлы»; в обоих случаях файлы окажутся рядом с программой.
Затем укажите название, версию и издателя, выберите область установки и архитектуру, загрузите .ico и запустите сборку. Протестируйте результат на Windows; см. варианты тестирования без ПК с Windows.
Утилиты командной строки
Установщики создаются для настольных приложений, но и CLI от них выигрывает: известное расположение, запись для удаления и тихое развёртывание с /S для ИТ-отделов. Два нюанса:
- Установщик не добавляет папку в
PATH. Сообщите пользователям папку установки или научите утилиту предлагать добавить себя при первом запуске. - Пользовательские установки попадают в
%LOCALAPPDATA%\Programs\MyApp, куда пользователи могут попасть без прав администратора.
Для инструментов, ориентированных на разработчиков, манифесты winget или scoop могут подойти вашей аудитории лучше установщика; они могут указывать на тот же подписанный .exe.
Примечания
- Эвристика антивирусов. Свежие, неподписанные, статически слинкованные бинарники Go и Rust иногда срабатывают на эвристических сканерах. Установщик, помещающий программу в Program Files, немного помогает; подпись кода помогает значительно. См. руководство по SmartScreen.
- Без рантайма и без зависимостей. Оба языка включают рантайм в бинарник. Установщик поставляет бинарник как есть.
- Обновления. Новый установщик с более высокой версией заменяет файлы на месте.
Частые вопросы
Можно ли загрузить только .exe?
Да. Единственный .exe принимается сам по себе, и установщик всё равно создаёт ярлыки, деинсталлятор и запись в «Параметрах» Windows.
Нужна ли Windows, чтобы собрать установщик?
Нет. Соберите бинарник в своей ОС, загрузите его, и ExeTup скомпилирует установщик в облаке. Windows понадобится только для проверки результата.
Почему моё GUI-приложение на Go открывает чёрное окно консоли?
Соберите с -ldflags "-H windowsgui". В Rust добавьте #![windows_subsystem = "windows"] в main.rs.
Как поместить свою иконку на сам .exe?
Встройте её как ресурс Windows: go-winres для Go, crate winres или embed-resource для Rust. Загрузите тот же .ico в ExeTup для установщика и ярлыков.
Похожие руководства
- Создать установщик Windows на Mac или LinuxКак собрать Setup.exe, если вы разрабатываете на macOS или Linux: от кросс-компиляции NSIS до сборки прямо в браузере, и как протестировать результат без собственного ПК с Windows.
- Как превратить .exe в установщик Windows (exe в Setup.exe)Как превратить обычный .exe или папку с .exe внутри в полноценный установщик Windows с ярлыками и деинсталлятором, не написав ни строчки установочного скрипта.
- Тихая установка Setup.exe: ключ /S, своя папка и развёртываниеКак запустить Setup.exe на базе NSIS в тихом режиме с ключом /S, задать папку через /D=, тихо удалить программу и развернуть установщик через Intune, PDQ или скрипт.