為您的 Windows 應用程式選擇一個發佈路徑

你如何分發 Windows 應用程式,會影響程式碼簽署成本、更新機制、企業管理性,以及客戶發現和安裝的便利性。 本文比較主要路徑,幫助你做出正確的選擇。

小提示

對大多數開發者來說,Microsoft Store 是推薦的選擇。 它提供廣泛的可發現性、可信賴的安裝體驗,且無需管理 MSIX 提交的基礎設施(Microsoft 重新簽約並托管套件)。 也接受 Win32 MSI/EXE 安裝程式的提交——發布者必須提供版本化的 HTTPS 安裝程式 URL——詳見 MSI/EXE 應用程式提交。 MSIX 提交的作品可免費簽署程式碼並內建更新傳遞。

備註

如果你的應用程式是以網頁技術(HTML、JavaScript、CSS)建構,漸進式網頁應用(PWA)是最快的Microsoft Store路徑——不需要原生的打包工具。

分布路徑一覽

路徑 最適合用於 代碼簽署成本 自動更新 企業版 MDM 透過商店發行
Microsoft Store (MSIX) 消費者與企業應用程式,廣泛覆蓋 ✅ 免費(商店重新簽收你的包裹) ✅ 內建 ✅ 透過 Intune 與 公司入口網站 ✅ 是
Microsoft Store(MSI/EXE 安裝程式) 現有 Win32 應用程式與自有安裝程式 💲 Publisher 必須以憑證簽署安裝程式及所有 PE 檔案,並連結至 Microsoft 受信任根程式 ❌ 手冊(應用程式或安裝程式負責更新) ✅ 透過 Intune 與 公司入口網站 ✅ 是
PWA(漸進式網頁應用程式) 網頁應用程式與網頁體驗 ✅ 免費(店家代簽) ✅ 透過商店或瀏覽器 ✅ 透過 Intune 與 公司入口網站 ✅ 是
MSIX 側載(企業級) 透過 Intune/ConfigMgr 建立內部 LOB 應用程式 💲 Azure Artifact 簽署(前稱可信簽署)(~每月 US$10)或自簽 + Intune 證書設定檔 ✅ 透過 App 安裝程式檔案或 MDM ✅ 原生 ❌ 否
MSIX 直接下載(ISV) 從你自己網站販售的商業應用程式 💲 需 CA 受信任憑證(Azure Artifact Signing(前稱可信簽署)推薦) ✅ 透過 .appinstaller 檔案 ⚠️ 限量 ❌ 否
包裝與外部位置 現有具有自己安裝程式且需要 Windows 功能的應用程式 💲 和 MSIX 直接下載 一樣 ✅ 你現有的機械裝置 ⚠️ 限量 ⚠️ 透過 MSI/EXE 商店提交(需出版社簽名)
未封裝的 WinUI 3 利基市場:不具備 MSIX 功能或追求安裝最大化簡單性的企業級市場 💲 推薦 SmartScreen 認證 ❌ 僅限手動 ⚠️ Limited(透過 Intune/ConfigMgr Win32 部署) ⚠️ 透過 MSI/EXE 商店提交(需出版社簽名)

發佈到 Microsoft Store 是 Windows 應用程式最完整的散布解決方案。 有兩種提交途徑可供選擇:

  • MSIX 提交 — 建議用於新應用程式及 WinUI 3 應用程式。 Microsoft 重新簽署套件;不需要購買憑證。 包含由商店管理的更新、階段性推出及差異式下載。
  • MSI/EXE 安裝程式提交 — 適用於已有且有自己安裝程式的 Win32 應用程式。 Publisher 會向安裝程式提交一個版本化的 HTTPS URL,安裝程式託管在 publisher 自己的 CDN 上;商店會從該 URL 下載並執行安裝程式,作為 Store 安裝流程的一部分。 Publisher必須以憑證與 Microsoft 受信任根程式 中的 CA 連結簽署安裝程式。 更新是應用程式的責任。

你會得到什麼(兩種路徑):

  • 透過商店的搜尋及精心策劃的收藏集來發掘
  • 可信安裝使用者體驗
  • 包含收入處理、退款與分析
  • 透過 Intune 搭配 公司入口網站 進行企業部署

需求:

何時選擇:

  • 你的應用程式主要針對消費者或商業用戶
  • 你需要最簡單的配送基礎設施
  • 你正在打造一個新的 WinUI 3 應用程式(你已經打包好了——只要提交即可)

→ 發佈至Microsoft Store

漸進式 Web 應用程序 (PWA)

如果你的應用程式是網站或主要建立在網路技術上,漸進式網頁應用程式是通往 Microsoft Store 最快的途徑——不需要原生包裝工具或購買程式碼簽署。

PWA 是一種網頁應用程式,瀏覽器可以作為獨立應用程式安裝。 它可以離線執行、發送推播通知、出現在開始選單和工作列,並透過 Microsoft Store 發佈。 使用 PWABuilder 幾分鐘內就能打包你的網站提交商店。

你能獲得什麼:

  • 在商店分發並免費簽署代碼(商店簽署軟體包)
  • 任何裝置搭配現代瀏覽器都能運作
  • 不需要手動撰寫 MSIX、WiX 或安裝程式——像 PWABuilder 這類工具會自動幫你生成商店提交套件
  • 內建更新傳遞 — 使用者總是能收到您最新的網頁內容(托管內容更新,無需重新提交到商店)

需求:

Limitations:

  • 深層的原生 Windows API(文件系統存取、硬體整合等,超越網頁 API 的功能)在沒有額外的橋接下無法使用。
  • 應用程式邏輯運行於網頁環境中——不適合需要原生 .NET、C++ 或 WinRT API 的應用程式

何時選擇:

  • 你的應用程式是一個網頁應用程式、SaaS 工具或內容網站,你想讓它可安裝
  • 你想要以最快的速度進入商店,且使用最少的工具裝備
  • 你的功能需求由現代 Web API 滿足

→ 漸進式網頁應用程式概述
使用 PWABuilder 發佈 PWA 到 Microsoft 商店

MSIX 側載 — 企業 LOB 分發

對於將透過 Microsoft Intune 或 設定管理員 部署到受管理裝置的內部業務應用程式,推薦使用 MSIX 側載。

你能獲得什麼:

  • 靜默安裝與透過 MDM 政策更新
  • 與企業設備管理(Intune, ConfigMgr)的整合
  • 完整的套件身份與 Windows 功能存取權(通知、背景任務等)

代碼簽署:

需求:

  • 目標裝置必須信任簽署憑證(透過 MDM 或群組原則)
  • 目標裝置必須允許側載(Windows 10 2004+ 版本及所有 Windows 11 裝置預設啟用)

何時選擇:

  • 將內部應用程式分發給公司管理的裝置
  • 你有一個 IT 團隊可以透過 Intune 或群組政策來設定憑證信任

→ 使用 Intune 部署 MSIX 應用程式
→ 使用 設定管理員 部署 MSIX 應用程式

MSIX 直接下載 — ISV 與商業應用程式

對於直接從你網站販售的商業應用程式(非透過商店),你可以將 MSIX 套件附帶 .appinstaller 檔案以支援自動更新。

你能獲得什麼:

  • 透過 App Installer 的熟悉安裝體驗
  • 透過 .appinstaller 檔案自動更新支援(託管在您的伺服器上)
  • 完整套件識別碼與 Windows 功能存取
  • 掌控自己的分銷通路與價格

代碼簽署:

  • 必須持有 CA 受信任的程式碼簽署憑證——使用者若不信任該憑證,無法安裝未簽署或自簽的 MSIX 套件
  • Azure Artifact Signing(前稱 Trusted Signing)(~每月 $10)是 Microsoft 推薦的選項:無需硬體令牌,能整合 CI/CD 管線
  • 傳統的 OV 證書也被接受(通常每年 150–300 美元,由 CA 提供)

智慧螢幕: 新憑證會根據下載量隨時間累積 SmartScreen 聲譽。 可能會在新版本中收到一些 SmartScreen 提示。 請參閱Windows 應用程式開發者的 SmartScreen 信譽。

這很重要

ms-appinstaller:自 2023 年 12 月起,URI 協定(一鍵瀏覽器安裝)預設被停用。 直接連結 .appinstaller 檔案下載,或考慮在商店發布以擴大觸及範圍。 請參見Windows應用程式發佈功能目前狀態。

何時選擇:

  • 你是一個直接從自己網站銷售軟體的獨立軟體廠商(ISV)
  • 你需要掌控安裝程式的使用者體驗、價格或授權,而商店不支援这些功能
  • 你的客戶是那些在商店外採購軟體的企業

→ 應用程式安裝程式檔案概述
→ 自動更新與修復應用程式

帶有外部位置的封裝(稀疏封裝)

如果你已有已有的應用程式有自己的安裝程式(WiX、NSIS、InstallShield),並且想新增需要套件身份的 Windows 功能——但又不想用 MSIX 取代安裝程式——就用帶有外部位置的包裝。

你能獲得什麼:

  • 在不更改安裝程式或二進位位置的情況下,設定套件身份
  • 存取 Windows 功能:通知、背景任務、檔案類型關聯、協定處理器
  • 你現有的安裝與更新機制會維持不變

你不懂的是什麼:

  • 直接提交至 MSIX 商店(儘管稀疏套件本身不會被提交至商店,但您可以透過 MSI/EXE 商店安裝路徑來提交底層安裝程式)
  • 完整 MSIX 的乾淨安裝/卸載模式

何時選擇:

  • 你有一個已經建立的 Win32/WPF/WinForms 應用程式,並且有一個已確立的安裝程式。
  • 你需要特定的 Windows API 功能,這些功能需要套件識別碼
  • 目前完全遷移到 MSIX 並不現實

授予套件身份透過外部位置進行封裝

未封裝的 WinUI 3

未封裝發行版則完全移除 MSIX——應用程式直接從資料夾執行,沒有套件清單。 這是一個適合特定情境的小眾選項。

你能獲得什麼:

  • 更簡單的建置輸出(一個檔案資料夾,沒有 MSIX 工具)
  • 目標機器不需要 MSIX 基礎架構
  • 在未啟用 MSIX 側載的機器上運作

Limitations:

  • 單檔案 EXE(有限支援)— PublishSingleFile 僅支援未封裝、自包含的應用程式(Windows 應用程式 SDK 1.5 及更新版本)。 它會產生單一且可散佈的 EXE,並在首次啟動時解壓縮相依元件。 封裝應用程式及依賴框架的應用程式不支援 PublishSingleFile。 請參閱 單檔案 EXE 以了解所需的 MSBuild 屬性。
  • Runtime deployment — 您必須將Windows 應用程式 SDK執行時安裝程式打包,或使用自包含部署(輸出較大)
  • 沒有套件識別碼 — 沒有自動更新、沒有背景任務、也沒有透過清單建立檔案類型的關聯
  • 無 MSIX/套件識別碼的 Store 提交 — 此模型沒有套件識別碼,無法以 MSIX 套件提交至商店。 傳統安裝程式(MSI/EXE)可以另外提交,但這不屬於這個發行路徑。
  • 除非使用 CA 信任的憑證簽署,否則會顯示 SmartScreen 警告

何時選擇:

  • 你的目標環境無法使用 MSIX(較少見;大多數受管企業環境都支援 MSIX)
  • 你是在打造一個內部工具,MSIX 的開銷是不合理的

對大多數 WinUI 3 應用程式來說,MSIX(透過商店或直接下載)是較好的選擇。 上述限制常常讓開發者感到驚訝,因為他們在投資未包裝發行後才發現這些限制。

→ 發佈未封裝的 WinUI 3 應用程式 — 逐步指南及執行時部署選項

許多 Windows 應用程式是透過 ClickOnce、MSI、WiX、Inno Setup 或類似技術來分發的。 這些都是已建立且支援的選項,特別是對於無法使用 MSIX 或不需要 Store 發行的應用程式。 下表總結了常見選項及其取捨。

方法 自動更新 需要代碼簽署 商店合格資格 最適合用於
MSIX 透過商店 ✅ 內建 ✅ 免費(商店招牌) ✅ 是 大多數應用程式 — 推薦的起點
MSIX + .appinstaller ✅ 內建 💲 CA 信任的憑證 ❌ 否 ISV 直接從網站分發
ClickOnce ✅ 內建 💲 推薦認證 ❌ 否 WPF/WinForms 應用程式;不支援 WinUI 3
MSI / WiX / Inno 設定 ⚠️ 手動還是自訂 💲 推薦認證 ⚠️ 來自 MSI/EXE 商店投稿(見下文) 安裝需求複雜或現有安裝程式的應用程式
自包含的 EXE(xcopy/zip) ❌ 無 💲 推薦認證 ❌ 否 簡單的工具;開發者/重度使用者受眾
溫格特清單 ✅ 透過 winget 💲 推薦認證 ❌ 否 上述任一——透過winget install增加可被發現性

ClickOnce

ClickOnce 是內建於 Visual Studio 的 .NET 部署技術。 它在網頁伺服器或檔案分享上架設清單;使用者從清單 URL 安裝,ClickOnce 則在啟動時負責更新檢查。 它很適合分發給已知用戶群的 WPF 和 WinForms 應用程式。

ClickOnce 不支援 WinUI 3 應用程式。 使用 MSIX .appinstaller 來直接發佈 WinUI 3。

→ ClickOnce 的安全與部署

MSI、WiX、Inno Setup 和 NSIS

傳統的 EXE 與 MSI 安裝程式仍常見於安裝需求複雜的 Windows 應用程式(驅動程式安裝、系統服務、登錄檔設定)。 像 WiX Toolset、 Inno Setup 和 NSIS 這類工具由社群維護並廣泛使用。 更新支援需要你自己實作。

這些格式不具備 MSIX 套件的 Store 資格,但可透過 MSI/EXE 安裝路徑提交至商店(需將憑證鏈接至 Microsoft 受信任根程式 的 CA 及具備靜默安裝功能的安裝程式)。 如果你需要針對特定Windows特性的套件身份,也可以搭配 包裝搭配外部位置。

自包含的 EXE(xcopy 式部署)

dotnet publish --self-contained 會產生一個檔案資料夾(或單一檔案 EXE),使用者可在不安裝 .NET 的情況下執行。 這是最簡單的發行模式,但使用者需要手動下載新版本。 它適合命令列工具、開發者工具及進階使用者應用程式。

Winget — 為任何分發路徑增添可發現性

無論你的包裝格式為何,你都可以將清單提交到 Windows 封裝管理員 社群倉庫,讓你的應用程式可以透過 winget install <your-app> 安裝。 這不會取代你現有的發佈方式——它只是增加一個對開發者和技術層面都重視的命令列安裝路徑。