Дистрибуция Windows-приложения без подписи кода — гарантированные проблемы с SmartScreen и Windows Defender. Даже если приложение полностью безопасно, пользователи видят предупреждение «Неизвестный издатель» и в 30% случаев отказываются от установки. Эта проблема особенно критична для коммерческих продуктов: каждый потерянный установщик — это упущенная выручка. Согласно Microsoft, подписанные приложения блокируются реже. Подписанное приложение с EV-сертификатом снимает все предупреждения, а OV-сертификат со временем нарабатывает репутацию. Мы настраиваем сборку и подписание так, чтобы установка проходила без лишних диалогов, а ваш продукт выглядел профессионально. Затраты на сертификат составляют несколько сотен долларов в год, но окупаются доверием пользователей.
Как настроить сборку десктоп-приложения под Windows?
Electron + electron-builder — самый распространённый стек для кросс-платформенных приложений. Он позволяет собрать установщик для Windows, macOS и Linux из одной кодовой базы. Типовая конфигурация выглядит так:
# electron-builder.yml appId: com.company.appname productName: AppName win: target: - target: nsis # стандартный установщик - target: zip # портативная версия icon: build/icon.ico sign: true nsis: oneClick: false perMachine: true allowToChangeInstallationDirectory: true WiX Toolset — для создания MSI-пакетов, которые требуются в корпоративных средах с SCCM/Intune. MSI позволяет централизованно управлять установкой и обновлениями. Пример простого .wxs:
<!-- product.wxs --> <Product Id="*" Name="AppName" Version="1.0.0" Manufacturer="Company"> <Package Compressed="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="AppName" /> </Directory> </Directory> <Component Id="MainExecutable" Directory="INSTALLFOLDER"> <File Source="AppName.exe" KeyPath="yes" /> </Component> </Product> Как выбрать тип установщика?
| Установщик | Преимущества | Недостатки | Подходит для |
|---|---|---|---|
| NSIS | Простота настройки, малый размер, поддержка скриптов | Ограниченная поддержка корпоративных сценариев | Небольших и средних проектов, быстрого старта |
| MSI (WiX) | Интеграция с SCCM/Intune, групповая политика, возможность отката | Сложнее конфигурация, больший размер | Крупных заказчиков, корпоративного распространения |
Выбор зависит от вашей целевой аудитории. Если продукт ориентирован на enterprise-сегмент — выбирайте MSI. Для массового пользователя достаточно NSIS.
Почему подписание кода обязательно?
SmartScreen анализирует цифровую подпись и репутацию издателя. Без подписи рейтинг нулевой, и система блокирует установку. Подписанное приложение с EV-сертификатом получает «зелёный свет» сразу. Мы помогаем выбрать тип сертификата и настроить процесс.
| Тип сертификата | Время получения | Доверие SmartScreen | Стоимость (ориентир) |
|---|---|---|---|
| EV (Extended Validation) | 3–7 дней | Сразу без предупреждений | Выше |
| OV (Organization Validation) | 1–3 дня | Требует накопления репутации | Ниже |
EV-сертификат лучше OV: он сразу даёт бесшовную установку, а OV требует времени для накопления репутации. Для большинства коммерческих продуктов мы рекомендуем EV.
Code Signing
Сертификат подписи кода: EV (Extended Validation) — сразу даёт хорошую репутацию SmartScreen; OV (Organization Validation) — требует накопления репутации.
# Подписание через signtool.exe signtool sign ` /fd SHA256 ` /tr http://timestamp.digicert.com ` /td SHA256 ` /f certificate.pfx ` /p $env:CERT_PASSWORD ` "dist\AppName-Setup.exe" # Проверка подписи signtool verify /pa "dist\AppName-Setup.exe" Автоподписание в CI/CD (GitHub Actions)
- name: Sign Windows executable env: CERTIFICATE_BASE64: ${{ secrets.WINDOWS_CERTIFICATE_BASE64 }} CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} run: | $cert = [Convert]::FromBase64String($env:CERTIFICATE_BASE64) [IO.File]::WriteAllBytes("certificate.pfx", $cert) & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" ` sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 ` /f certificate.pfx /p $env:CERTIFICATE_PASSWORD ` "dist\AppName-Setup.exe" Автообновление приложения
Подписание установщика — первый шаг; не менее важна доставка обновлений. Electron-updater поддерживает GitHub Releases, S3 и собственные серверы обновлений. Обновление скачивается фоново, пользователь получает уведомление и перезапускает приложение в удобный момент — без принудительного прерывания работы. Для MSI-дистрибутива используем Windows Installer patch или полный пересобранный пакет с новой версией. Пакет обновления тоже подписывается — иначе SmartScreen заблокирует установку патча. Дельта-обновления сокращают объём загрузки на 60-70%, что критично для пользователей с медленным соединением. Мы настраиваем канальную систему: stable, beta, nightly — каждый канал получает свою ветку обновлений и отдельный ключ подписи.
Что входит в работу
- Аудит текущего процесса сборки — выявляем узкие места и неоптимальные конфигурации.
- Выбор типа установщика и сертификата — в зависимости от целевой аудитории.
- Настройка скриптов сборки — конфигурируем electron-builder или WiX для автоматического подписания.
- Интеграция подписи в CI/CD — настраиваем GitHub Actions, GitLab CI или Jenkins для безопасного подписания при каждом релизе.
- Тестирование установки — проверяем, что приложение устанавливается без предупреждений.
- Передача документации — описываем процесс и даём рекомендации по обновлению сертификата.
Настраиваем под ключ за 2–3 рабочих дня. 5 лет опыта в сборке десктоп-приложений, более 50 успешных проектов. Свяжитесь с нами для консультации — оценим ваш проект и предложим оптимальное решение. Закажите настройку сборки, чтобы ваше приложение выглядело профессионально и вызывало доверие.
Дополнительные рекомендации: Храните сертификат в защищённом хранилище, например, Azure Key Vault или AWS KMS. Используйте отдельные сертификаты для dev и prod среды. Регулярно проверяйте срок действия сертификата — истечение может заблокировать релиз. Экономия на поддержке пользователей после внедрения подписи может достигать 20%.
Для углублённого изучения обратитесь к официальной документации: signtool и WiX Toolset.







