Windows 為什麼會出現「Windows 已保護您的電腦」

· · Windows, SmartScreen, 程式碼簽章, 軟體發佈, MSIX, ClickOnce, Windows 開發, 資安

以實務角度整理 SmartScreen、程式碼簽章、EV/OV 憑證、MSIX/Store 發佈

開發並發佈 Windows 應用程式時,最先容易碰到的一道牆,就是這個警告。

Windows 已保護您的電腦
Microsoft Defender SmartScreen 已阻止無法識別的應用程式啟動。

出現這個警告時,使用者會感到不安。開發者也常常困惑:「明明不是病毒,為什麼會被擋?」、「明明已經做了程式碼簽章,為什麼還是出現警告?」。

本文從程式碼簽章、EV/OV 憑證、MSIX、Microsoft Store、ClickOnce、內部發佈的角度,整理 Windows 應用程式發佈時的 SmartScreen 警告問題。

1. 本文一句話總結

發佈 Windows 應用程式時,需要做程式碼簽章。
不過,程式碼簽章並不是能保證消除 SmartScreen 警告的魔法

重要的是把三個觀點分開來看。

觀點 需要處理的問題
簽章 誰做的檔案、是否遭到竄改
信譽 該發行者或檔案在 Windows 端是否已經被充分信任
發佈途徑 Store、網頁、檔案共用、Intune、GPO 等,從哪裡發佈

大致的判斷準則如下。

情況 優先考慮的選項
廣泛發佈給一般使用者 優先考慮 Microsoft Store / MSIX
無法上架 Store 的商業應用程式 用 OV 憑證或 Azure Artifact Signing 簽章,並假設初期會出現警告
台灣以外地區的開發者・法人 先確認 Azure Artifact Signing 的使用條件,無法使用時 OV 憑證較現實
只在內部發佈 簽章 + 憑證發佈 + Intune/GPO/App Control 的運作設計
封閉網路・工廠・設備連動 事先固定簽章、發佈來源、允許規則與更新程序
未簽章的 EXE 原則上應避免
EV 憑證 只為了避開 SmartScreen 而購買的理由較薄弱

2. SmartScreen 不只是「病毒判定」

出現 SmartScreen 警告時,使用者會覺得「這是危險的應用程式嗎」。

但 SmartScreen 並不是單純只看「是不是病毒」。根據 Microsoft 的說明,對於下載的檔案,主要會看以下這些信譽資訊。

檢查項目 內容
發行者信譽 該簽署者、憑證、發行者是否受到信任
檔案雜湊信譽 這個具體的檔案是否已經廣泛發佈且沒有問題地被使用
是否有簽章 是否有有效的程式碼簽章
發佈途徑 透過 Store、網頁下載,還是內部發佈
管理原則 是否受企業的 Intune、GPO、App Control 等控管

這裡重要的是,新建立的檔案還沒有信譽

對開發團隊來說是正確無誤的應用程式,但在 Windows 眼中是「第一次見到的檔案」。即使已經簽章,只要檔案雜湊或發行者的信譽還不足,SmartScreen 警告仍可能出現。

也就是說,SmartScreen 警告可以這樣理解會比較清楚。

不代表已經被判定為惡意軟體。
但確實代表 Windows 目前還不夠信任這個檔案。

不理解這個差異,就容易產生「明明簽章了怎麼還是沒解決」、「明明買了 EV 憑證怎麼還是沒變」之類的誤解。

3. 程式碼簽章保證的是什麼

程式碼簽章能保證的主要有兩件事。

  1. 該檔案確實由所顯示的發行者簽署
  2. 簽署之後檔案沒有被竄改

反過來說,以下這些事情並不會直接被保證。

  • 該應用程式絕對安全
  • 該應用程式沒有錯誤
  • SmartScreen 警告一定不會出現
  • 一定會被企業原則允許

儘管如此,程式碼簽章幾乎是必要的。

沒有簽章的話,使用者無法得知發行者是誰。在企業環境中,未簽章的檔案也可能被 App Control、EDR、Defender、Proxy 或郵件閘道擋下。開發自動更新機制時,也需要靠簽章來驗證更新檔案是否為真。

換句話說,程式碼簽章不只是「為了消除警告」,而是發佈、更新、稽核、企業導入的基礎

4. 買 EV 憑證就能從第一次開始不出現警告,是過時的理解

過去普遍認為,使用 EV 程式碼簽章憑證,會在 SmartScreen 上獲得較有利的待遇。

但現在,至少「只為了避開 SmartScreen 而購買 EV 憑證」的判斷是有風險的。根據 Microsoft 目前的說明,EV 憑證已經不再具備自動避開首次下載 SmartScreen 警告的效果。用 EV 簽章的檔案,也要和 OV 憑證一樣,假設信譽需要逐步累積。

EV 憑證並非完全沒有意義。

  • 企業採購上,較嚴格的身份驗證會被納入評估
  • 客戶的資安審查要求使用 EV
  • 已經持有 EV 憑證,所以持續使用

如果有這些理由,使用它是可以的。

但不建議只為了這個目的去購買 EV 憑證。

想從第一次下載開始就消除 SmartScreen 警告,所以買 EV 憑證

如果目的僅止於此,應該先檢討發佈途徑、簽章方式、對初期使用者的說明、更新頻率,以及能否透過 Store 發佈。

5. 簽章方式的選項

整理一下 Windows 應用程式發佈時常見的簽章與發佈選項。

選項 適合的情境 SmartScreen 方面的考量
Microsoft Store(MSIX) 一般用途、新應用程式、標準發佈 由 Store 端重新簽章,最為穩定
Microsoft Store(MSI/EXE) 讓既有 Win32 應用程式上架 Store 安裝程式端仍需簽章。透過 Store 導入的使用體驗較佳
Azure Artifact Signing Store 外發佈、CI/CD 整合、雲端簽章 信譽為累積式。需注意可用地區
OV 程式碼簽章憑證 Store 外發佈、商業應用程式、當地開發者 傳統且現實。要預期初期會出現警告
EV 程式碼簽章憑證 因採購要求或內部規範而需要 不應以立即避開 SmartScreen 為目的選用
自我簽署憑證 開發、驗證、受管理的內部環境 不適合公開發佈,需要部署受信任的根憑證
未簽章 原則上不使用 公開發佈時應避免

Microsoft Store / MSIX

若要發佈給一般使用者,第一個該考慮的就是 Microsoft Store。

特別是 MSIX 搭配 Store 發佈的組合,在憑證管理與 SmartScreen 警告方面都比較有利。提交到 Store 的 MSIX 套件會由 Microsoft 重新簽章,也減少了開發者自行購買、更新憑證的負擔。

不過,並不是所有 Windows 應用程式都適合 MSIX。

  • 深度使用 Windows 服務
  • 需要驅動程式
  • 有 shell extension
  • 有舊式 COM 註冊或 ActiveX 資產
  • 安裝時需要複雜的系統變更

遇到這類情況時,用 MSI 或傳統安裝程式往往比 MSIX 更自然。

Azure Artifact Signing

Azure Artifact Signing 是 Microsoft 提供的雲端型程式碼簽章服務,過去稱為 Trusted Signing。

不需要使用實體 USB Token,容易整合進 CI/CD,是它的優勢。作為 Store 外發佈的簽章方式相當有力,但有可用地區與帳號條件的限制。

根據 2026 年當時的 Microsoft 資料,適用對象為美國、加拿大、歐盟、英國的組織,以及美國、加拿大的個人開發者。台灣等其他地區的法人或個人若要使用,務必先確認使用條件;若無法使用,傳統的 OV 程式碼簽章憑證是較現實的候選方案。

另外,即使用 Azure Artifact Signing 簽章,SmartScreen 的信任也不會立即生效。和 OV 憑證一樣,信譽會依發佈實績逐步累積。

OV 程式碼簽章憑證

對於在 Store 之外發佈 Windows 應用程式的開發者或法人來說,OV 程式碼簽章憑證現在仍是現實的選項。

使用 OV 憑證後,使用者會看到發行者名稱,狀態明顯優於完全未簽章。不過,新應用程式或新檔案仍可能出現 SmartScreen 警告。

使用 OV 憑證時,值得留意的地方如下。

  • 持續使用同一個發行者名稱
  • 每次都以同一個發行者身份簽章
  • 簽章之後不再變更檔案
  • 加上時間戳記
  • 不只確認 EXE,也要確認 DLL、MSI、updater
  • 準備憑證更新時的轉移計畫

自我簽署憑證

自我簽署憑證在開發或驗證階段很方便。

但在公開發佈時基本上無法使用,因為從使用者 Windows 的角度來看,這個憑證並未受到信任。

自我簽署憑證可以使用的環境有:

  • 開發者的本機電腦
  • 測試人員的驗證環境
  • 可以透過 Intune 或 GPO 部署受信任憑證的內部裝置
  • 能夠完全管理裝置設定的封閉網路環境

即使使用自我簽署憑證,也需要管理「何時刪除」「誰把它加入信任清單」「是否混入正式環境」等問題。

6. 實務上該替哪些東西簽章

「幫 EXE 簽章就結束了」是不夠的。

Windows 應用程式發佈時,需要完整確認一遍簽章對象。

對象 注意事項
應用程式本體 EXE 至少要簽章
DLL 自家 DLL、外掛、helper DLL 也要確認
安裝程式 EXE 使用者最先執行的檔案,非常重要
MSI MSI 本身也要簽章
MSIX 確認套件簽章與 Publisher 是否一致
updater 因為擁有權限,特別重要
更新用 metadata 自訂 updater 要使用已簽章的 metadata
驅動程式 有另一套簽章要求,需與一般應用程式分開考量

使用 SignTool 時,目前的 Windows SDK 中 /fd/td 的指定很重要,通常會指定 SHA256。

signtool sign /fd SHA256 /tr <timestamp-server-url> /td SHA256 /a .\MyApp.exe
signtool verify /pa /v .\MyApp.exe

重點是要對最終成品簽章

如果簽章之後又重寫 EXE、替換 ZIP 內的檔案,或是在建立安裝程式之後再修改內嵌檔案,簽章就可能損毀,或是驗證結果和預期不同。

在建置流程中,要把這個順序固定下來。

建置
  ↓
收集相依檔案
  ↓
建立安裝程式 / 套件
  ↓
簽章
  ↓
驗證簽章
  ↓
記錄雜湊值
  ↓
發佈

7. 依發佈方式的不同考量

MSI / EXE 安裝程式

使用 MSI 或 EXE 安裝程式發佈時,一定要對使用者最先執行的檔案簽章。

此外,也要重新檢視安裝後部署的 EXE 或 DLL 是否需要簽章。就算安裝程式已經簽章,部署後的 updater 或 helper 若未簽章,在企業環境中仍可能被擋下。

該考慮的事項大致固定:

  • 對安裝程式本體簽章
  • 內含的 EXE/DLL 也要簽章
  • 把需要 UAC 提升權限的處理分離出來
  • 把 updater 或 service helper 另外列管並稽核
  • 讓下載頁面的網址保持穩定
  • 向初期使用者說明發行者名稱

MSIX

MSIX 是套件一致性較強的方式。

如果能透過 Store 發佈,在 SmartScreen 警告與憑證管理方面會相當容易處理。另一方面,若是內部旁載(sideload)或 Store 外發佈,就需要好好設計 MSIX 套件的簽章與憑證信任。

列出幾個注意事項:

  • 開發、驗證階段可以使用自我簽署憑證
  • 正式發佈要使用公開受信任的簽章方式
  • 讓 appxmanifest 的 Publisher 與憑證的 Subject 一致
  • Store 外發佈時要假設可能出現 SmartScreen 警告
  • 事先確認是否存在不適合 MSIX 的系統整合需求

ClickOnce

ClickOnce 對於把 WinForms/WPF 這類 .NET 業務應用程式發佈給一般使用者相當方便。

不過,並不是用了 ClickOnce,SmartScreen 的問題就會消失。使用者下載並啟動的途徑、資訊清單簽章、發佈來源,以及更新時的檔案變更都有關係。

在 ClickOnce 中該確認的事項如下:

  • 應用程式資訊清單與部署資訊清單的簽章
  • 發佈網址或共用資料夾的管理
  • 更新時憑證變更的處理方式
  • 是否會被內部 Proxy 或 Defender 擋下
  • 首次安裝時對使用者的說明

ClickOnce 的優勢是「容易發佈」,但如果不連同發行者信任與發佈途徑一起設計,實際運作時仍會卡關。

xcopy / ZIP 發佈

只放個資料夾、或是解壓縮 ZIP 就完成的發佈方式很單純。

在封閉網路或內部工具中可能有效,但對一般使用者的網頁發佈而言,卻是最容易受到 SmartScreen、Defender 與 Mark of the Web 影響的方式。

如果要用 xcopy 發佈,這些地方要守住:

  • 對 EXE/DLL 簽章
  • 不只依賴 ZIP,也要驗證內部檔案
  • 固定發佈來源
  • 明確標示版本、雜湊值與更新歷程
  • 如果之後補上自動更新,要加入簽章驗證

不該想成「因為不用做安裝程式所以簡單」,而是「自己扛起安裝程式本來該負的責任」。

自訂 updater

自訂 updater 很方便,但本身就是一個安全邊界。

updater 會取得新檔案並取代既有檔案,有時甚至以系統管理員權限運作。這個環節一旦出問題,會比應用程式本體更危險。

至少要確認以下事項:

  • 對更新用 metadata 簽章
  • 在 metadata 中包含 version、hash、size、channel、expiry
  • 下載後驗證雜湊值與簽章
  • 驗證失敗時採用 fail-closed 方式停止
  • 準備 rollback 程序
  • 決定 updater 本身的更新方式
  • 將正式簽章金鑰與開發環境分離

這個主題可以搭配既有文章「自動更新的安全性設計」一起思考,會更容易理解。

8. 內部發佈光看 SmartScreen 並不夠

在內部應用程式的情境中,常見一個誤解。

反正只在內部使用,不需要簽章

這樣的想法很危險。

在內部環境中,牽涉的不只是 SmartScreen,還有多個機制。

機制 造成的影響
Microsoft Defender 檢查並隔離檔案
SmartScreen 對未知的下載或執行發出警告或加以停止
Intune 執行應用程式發佈、憑證發佈、套用原則
Group Policy 發佈受信任憑證或執行控制規則
App Control for Business / WDAC 封鎖不被允許的應用程式
EDR 產品 監控行為與發佈途徑
Proxy / SWG 有時會直接阻擋下載

特別是在使用 App Control for Business 的環境中,問題不只在於「是否簽章」,還包括「該發行者是否被允許」「是否經由 managed installer」「雜湊值或路徑是否被允許」等。

Microsoft 的部署指南中也提到,App Control 的原則變更,應先以稽核模式部署,確認封鎖事件是否符合預期後,再擴大到強制模式。

內部發佈時,依下列順序設計較為現實:

1. 分開對象裝置
   - 開發者
   - 測試人員
   - 部分部門
   - 全公司

2. 決定發佈途徑
   - Intune
   - GPO + 檔案共用
   - 內部入口網站
   - VDI / RemoteApp
   - 封閉網路的手動發佈

3. 決定信任規則
   - 發行者規則
   - 憑證發佈
   - managed installer
   - 雜湊值允許清單
   - 路徑允許清單

4. 以稽核模式確認
   - 什麼會被封鎖
   - 哪些 DLL 或 helper 被遺漏
   - 更新時是否被視為不同檔案

5. 分階段展開
   - 先小範圍發佈
   - 檢視日誌
   - 調整允許規則
   - 逐步擴大

內部發佈的重點,不是規避 SmartScreen,而是建立一條 Windows 端能夠理解、可以說明的發佈途徑

9. 常見誤解與正確想法

誤解 正確想法
程式碼簽章一定能消除警告 簽章了但信譽不足,警告仍會出現
EV 憑證從第一次就安全 現在不應以立即避開 SmartScreen 為目的選用
自我簽署也是簽章所以沒問題 公開發佈時基本上不受信任
用 ZIP 發佈就能避開警告 下載來源、Mark of the Web、執行檔的信譽都還在
HTTPS 就是安全的 HTTPS 保護的是通訊路徑,和發行者、執行檔的信譽是兩件事
內部應用程式不需要簽章 反而容易在 App Control、Defender、EDR 上出問題
只簽章安裝程式就夠了 部署後的 EXE、DLL、updater 也會被檢視
想要快點提高信譽,申請什麼就好 一般用途的 SmartScreen 信譽基本上是靠發佈實績累積的

10. 初期發佈時該如何向使用者說明

新的應用程式在最初幾週或初期使用者階段,可能出現 SmartScreen 警告。

這時,若只是告訴使用者「出現警告也請直接執行」,並不是好做法。安全的說明應該包含足以確認真偽的資訊。

以下是說明中該包含的項目:

  • 正式下載網址
  • 顯示的發行者名稱
  • 檔案名稱
  • 版本號
  • 發佈日期
  • 必要時提供 SHA-256 雜湊值
  • 如何確認檔案已簽章
  • 不要執行從不明途徑取得的檔案

舉例來說,內部使用的情況下,這樣的說明比較安全:

本應用程式僅透過內部入口網站的以下頁面發佈。
請確認顯示的發行者名稱是否為「○○股份有限公司」。
請不要執行透過信件附件或聊天工具轉發的 EXE。
若出現 SmartScreen 警告,請將畫面截圖並回報資訊系統部門。

對一般使用者,則可以優先採用 Microsoft Store 發佈,或是在下載頁面加上確認發行者的說明。

11. 判斷流程

決定發佈方式時,依這個順序思考比較不會迷失方向。

不能不是,是內部用有 Intune/GPO沒有管理要發佈 Windows 應用程式是給一般使用者用嗎能上架 Microsoft Store 嗎優先採用 Store / MSIX以 OV 憑證或 Artifact Signing 簽章有裝置管理機制嗎簽章 + 憑證發佈 + App Control 稽核固定發佈來源 + 簽章 + 使用者說明假設會出現初期 SmartScreen 警告從稽核模式開始分階段展開

實務上的第一候選可以這樣整理:

條件 第一候選
全新的一般用 Windows 應用程式 Microsoft Store / MSIX
讓既有 Win32 應用程式發佈給一般使用者 Store 的 MSI/EXE 途徑,或 OV 簽章 + 自行發佈
.NET 內部應用程式 ClickOnce 或 MSIX,若有裝置管理,也可考慮 Intune
需要服務或 COM 註冊 以 MSI 為主設計
放著就能用的診斷工具 已簽章 EXE + 固定發佈來源 + 版本管理
需要自訂 updater 先設計好已簽章的 metadata 與金鑰管理

12. 最低限度的檢查清單

發佈 Windows 應用程式前的檢查項目。

簽章

  • EXE 已簽章
  • DLL 已簽章
  • MSI 或安裝程式 EXE 已簽章
  • updater 已簽章
  • 已加上時間戳記
  • 簽章後未再修改檔案
  • 已用 signtool verify 驗證

發佈

  • 已決定正式發佈網址
  • 下載頁面已顯示發行者名稱
  • 已顯示版本號與發佈日期
  • 已假設可能出現初期 SmartScreen 警告
  • 已檢討能否上架 Microsoft Store
  • Store 外發佈時,已檢討 OV 憑證或 Artifact Signing

更新

  • 更新檔案也已簽章
  • 自訂 updater 已對 metadata 簽章
  • 已驗證 hash、size、version
  • 失敗時以 fail-closed 方式停止
  • 有 rollback 程序

內部發佈

  • 已確認 Intune / GPO / App Control 的狀況
  • 已決定憑證發佈方式
  • 已用稽核模式確認封鎖事件
  • 依部門分開,分階段展開
  • 已確認更新時是否會再次被封鎖

13. 總結

Windows 應用程式不是做完就結束,發佈出去的檔案必須讓 Windows、使用者、企業原則都認為是「值得信任的形式」。

該記住的重點大致如下:

  • SmartScreen 看的是檔案與發行者的信譽
  • 程式碼簽章是必要的,但不保證警告為零
  • EV 憑證不應以立即避開 SmartScreen 為目的選用
  • 一般發佈優先檢討 Microsoft Store / MSIX
  • Store 外發佈使用 OV 憑證或 Artifact Signing,並假設會有初期警告
  • 內部發佈不只要看 SmartScreen,也要看 Intune、GPO、App Control
  • updater 不是一個發佈功能,而是產品的安全邊界,需要如此設計

用一句話總結:

Windows 應用程式的發佈,重點不在「怎麼放上去」,而在「怎麼讓 Windows 信任」的設計。

相關閱讀

參考連結

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

為什麼會出現「Windows 已保護您的電腦」的警告?
因為 Microsoft Defender SmartScreen 判斷該檔案目前還不夠值得信任。SmartScreen 並不是單純的病毒判定,而是會看發行者信譽、檔案雜湊信譽、是否有簽章,以及發佈途徑。新建立的檔案對 Windows 而言是「第一次見到的檔案」,即使已經簽章,在信譽累積之前也可能出現警告。這不代表被判定為惡意軟體,但確實代表 Windows 目前還不夠信任這個檔案。
做了程式碼簽章,SmartScreen 警告就會消失嗎?
不一定會消失。程式碼簽章能保證的只有兩件事:檔案確實由所顯示的發行者簽署,以及簽署之後檔案沒有被竄改,並不保證警告完全不會出現。即使已簽章,只要檔案或發行者的信譽還不足,警告仍可能出現。話雖如此,程式碼簽章幾乎是發佈、更新、稽核與企業導入的必要基礎。沒有簽章的檔案,在企業環境中也可能被 App Control、EDR 或 Defender 擋下。
買 EV 憑證就能從第一次下載開始不出現 SmartScreen 警告嗎?
這是過時的理解。根據 Microsoft 目前的說明,EV 憑證已經不再具備自動避開首次下載 SmartScreen 警告的效果,用 EV 簽章的檔案,也要和 OV 憑證一樣,假設信譽是需要累積的。如果企業採購要求,或客戶的資安審查需要 EV 憑證,使用它仍有意義,但不建議只為了避開 SmartScreen 警告而購買 EV 憑證。若目的只是如此,應該先檢討發佈途徑、簽章方式,以及能否透過 Store 發佈。
要怎麼發佈才能減少 SmartScreen 警告?
如果要廣泛發佈給一般使用者,第一個該考慮的是 Microsoft Store / MSIX。提交到 Store 的 MSIX 套件會由 Microsoft 重新簽章,是 SmartScreen 方面最穩定的途徑。無法上架 Store 的話,就用 OV 憑證或 Azure Artifact Signing 簽章,並假設初期仍可能出現警告,同時提供正式下載網址、發行者名稱、版本、雜湊值等資訊給使用者。在內部發佈的情境下,除了簽章外,還需要一併設計 Intune / GPO / App Control 的發佈途徑。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽