你如何分發 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(推薦)
發佈到 Microsoft Store 是 Windows 應用程式最完整的散布解決方案。 有兩種提交途徑可供選擇:
- MSIX 提交 — 建議用於新應用程式及 WinUI 3 應用程式。 Microsoft 重新簽署套件;不需要購買憑證。 包含由商店管理的更新、階段性推出及差異式下載。
-
MSI/EXE 安裝程式提交 — 適用於已有且有自己安裝程式的 Win32 應用程式。 Publisher 會向安裝程式提交一個版本化的 HTTPS URL,安裝程式託管在 publisher 自己的 CDN 上;商店會從該 URL 下載並執行安裝程式,作為 Store 安裝流程的一部分。 Publisher必須以憑證與
Microsoft 受信任根程式 中的 CA 連結簽署安裝程式。 更新是應用程式的責任。
你會得到什麼(兩種路徑):
- 透過商店的搜尋及精心策劃的收藏集來發掘
- 可信安裝使用者體驗
- 包含收入處理、退款與分析
- 透過 Intune 搭配 公司入口網站 進行企業部署
需求:
- MSIX 是建議使用的封裝格式——WinUI 3 應用程式預設是打包。 擁有現有 MSI 或 EXE 安裝程式的 Win32 應用程式,也可以透過 MSI/EXE 安裝程式路徑提交(注意:MSI/EXE 提交需憑證鏈接至 Microsoft 受信任根程式 — 不接受自簽;此路徑無法提供商店管理的更新)
- 應用程式必須通過商店認證要求: MSIX 要求 | MSI/EXE 要求
- 需要開發者帳號(合作夥伴中心)
何時選擇:
- 你的應用程式主要針對消費者或商業用戶
- 你需要最簡單的配送基礎設施
- 你正在打造一個新的 WinUI 3 應用程式(你已經打包好了——只要提交即可)
漸進式 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 功能存取權(通知、背景任務等)
代碼簽署:
- 使用 Azure Artifact Signing(前稱 Trusted Signing)(每月約 $10)作為 CA 受信任憑證,或
- 使用透過 Intune 可信憑證設定檔部署到端點的自簽憑證
需求:
- 目標裝置必須信任簽署憑證(透過 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。
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> 安裝。 這不會取代你現有的發佈方式——它只是增加一個對開發者和技術層面都重視的命令列安裝路徑。