技術筆記
NativePHP Laravel 桌面應用

NativePHP 打包 Windows 版,遇到的簽章與 SmartScreen 問題

現象

用 NativePHP 把 ReadLater 打包成 Windows 版之後,本機執行完全正常, 但傳給另一台電腦安裝,Windows SmartScreen 跳出「Windows 已保護您的電腦」, 直接擋下安裝程式,要點好幾次「其他資訊」才能繼續。

原因

沒有簽章的 .exe 在 Windows 上先天不被信任,SmartScreen 會依照下載來源 與使用者統計數字決定要不要放行,全新、沒有簽章、下載次數少的執行檔幾乎 一定會被攔。這不是打包設定錯誤,是 Windows 對未知發行者的預設行為。

目前的處理方式

專案還在個人維護階段,還沒有申請 EV 程式碼簽章憑證(費用跟審核流程對 side project 來說偏重),所以先做兩件事降低阻力:

  1. 在下載頁面明確寫清楚「會看到 SmartScreen 警告,點『其他資訊』→ 『仍要執行』」,把預期心理準備做在前面,而不是讓使用者自己去猜。
  2. 提供 SHA256 checksum,讓在意安全性的使用者可以自行核對安裝檔沒有被竄改。

之後如果 ReadLater 有比較穩定的使用者數,會考慮申請憑證,把這一步的 摩擦感降到最低。目前先把力氣放在功能本身。