Дистрибуція 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.







