共用方式為


Windows 應用程式: 封裝、部署和程序

注意

針對發行前產品的部分相關資訊,在產品正式發行時可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

本主題討論有關下列事項的選項:

  • 是否會封裝您的應用程式。
  • 您將如何部署/散發您的應用程式以及如何安裝它。
  • 您的應用程式的執行階段程序 — 它的隔離程度如何;以及哪些 API 可供它使用。

您可以為新應用程式和現有應用程式做出這些決定。 但是,如果您仍處於新應用程式的規劃階段,那麼在開始考慮上述注意事項之前,請先決定您將用於應用程式的開發平台和使用者介面 (UI) 架構。 而對於該決定,請參閱 Windows 開發選項的概觀

封裝或不封裝

決定讓您的應用程式封裝或不封裝,首先取決於一個稱為套件識別資料 的概念,我們將在本節中說明。 如果您不需要那個,那麼決定就取決於您和您的使用者想要的安裝程式體驗。 讓我們深入研究這些事項的細節。

許多 Windows 擴充性功能 (包括背景工作、通知、動態磚和共用目標) 都可由應用程式使用,前提是該應用程式在執行階段時具有套件識別資料。 這是因為作業系統 (OS) 必須能夠識別對應 API 的呼叫端。 請參閱需要套件識別資料的功能

  • 如果您需要使用任何這些功能,那麼您的應用程式需要套件識別資料。 因此它需要 是一個封裝的應用程式 (封裝的應用程式是唯一具有套件識別資料的類型)。 封裝的應用程式是使用 MSIX 技術封裝的 (請參閱什麼是 MSIX?)。
    • 對於新應用程式,封裝程序很簡單 (本節末尾有如何執行此動作的相關資訊)。
    • 對於某些現有應用程式,您可以遵循與新應用程式相同的封裝程序。 但是,由於某些現有的應用程式尚未準備好讓其所有內容都存在於 MSIX 套件內,因此有一個選項可讓您的應用程式使用外部位置封裝。 這可讓您的應用程式具有套件識別資料;因此,能夠使用需要的功能。 如需詳細資訊,請參閱使用外部位置封裝來授與套件識別資料
  • 即使您 需要使用任何這些功能,建立封裝的應用程式仍然是一個好主意。 它為您的使用者提供了一個安裝、解除安裝和更新應用程式的最簡單方法。 如需詳細資訊,請參閱本主題中的部署/散發/安裝
  • 但是建立不封裝的應用程式是一個選項。

重點是,封裝的應用程式是唯一具有套件識別資料的類型 (而且它們具有最佳的安裝體驗)。 不封裝的應用程式沒有套件識別資料;所以它不能使用上面提到的 API/功能。

如需封裝與不封裝的詳細資訊,請參閱部署概觀;特別是該主題中的封裝應用程式的優點和缺點一節。 該主題也提到使用外部位置封裝的選項。

如需如何將應用程式設為封裝或不封裝的相關資訊:

另請參閱本主題中的「Windows 封裝管理員和 WinGet 用戶端」一節。

部署/散發/安裝

  • 封裝的應用程式是使用 MSIX 技術封裝的。
    • 封裝的應用程式也會使用 MSIX 來安裝。 但是,如果您選擇使用外部位置封裝,則可以將其視為「自備安裝程式」模型。 因此,將會 有一些安裝程式可供您與該選項搭配使用。 如需詳細資訊,請參閱使用外部位置封裝來授與套件識別資料
  • 不封裝的應用程式完全不涉及 MSIX。

那麼,為什麼您的應用程式是否封裝很重要呢?

  • 嗯,MSIX 可為您的使用者提供一個安裝、解除安裝和更新應用程式的簡單方法。 解除安裝是乾淨的-當您的應用程式被解除安裝時,系統會還原到安裝前相同的狀態;不會留下任何跡證。
  • 這類應用程式也支援累加式和自動更新。
  • Microsoft Store 針對此類應用程式進行了最佳化 (儘管它們可以在 Microsoft Store 內部或外部使用)。
  • 這是一個透過 MSIX 應用程式連結 (適用於 Azure 虛擬桌面虛擬機器) 使用的簡單路徑。 如需詳細資訊,請參閱什麼是 MSIX 應用程式連結?
  • 簽署的套件受益於強大的防竄改功能。 此好處甚至比安裝在 Program Files 下的不封裝應用程式更大。

另請參閱本主題中的「Windows 封裝管理員和 WinGet 用戶端」一節。

AppContainer 或 Medium IL

選擇是否在 AppContainer 中執行應用程式是一個安全性的問題。 AppContainer 應用程式的處理程序及其子處理程序會在輕量型應用程式容器內執行,在其中它們只能存取專門授與給它們的資源。 它們會使用檔案系統和登錄虛擬化來進行隔離。 因此,在 AppContainer 中實作的應用程式不會被駭客攻擊,而僅允許在有限的指派資源之外進行惡意的動作。

封裝或不封裝的應用程式可設定為在 AppContainer 中執行。 但對於封裝的應用程式來說,這個程序更加簡單。 如果應用程式不是 AppContainer 應用程式,則它是 Medium IL 應用程式。

如需詳細資訊,請參閱適用於舊版應用程式的 AppContainerMSIX AppContainer 應用程式

如需如何設定應用程式以在 AppContainer 或 Medium IL 中執行的相關資訊:

  • WinUI 3 應用程式 (Windows App SDK)。 請參閱針對 AppContainer 設定 WinUI 3 專案中的 uap10:TrustLevel 應用程式套件資訊清單屬性。
  • 桌面應用程式。 請參閱 MSIX AppContainer 應用程式中的 TrustLevel Visual Studio 專案屬性 (在適合您的應用程式類型的區段中)。
  • 通用 Windows 平台 (UWP) 應用程式。 UWP 應用程式已設定為在 AppContainer 中執行;且該設定無法變更。

請記住,不封裝的應用程式沒有應用程式套件資訊清單。 因此,對於不封裝的應用程式,您可以在專案檔 (而不是在應用程式套件資訊清單) 中宣告 AppContainer-或-Medium-IL 決定。

Win32 應用程式隔離

重要

本節中所述的功能適用於 Windows Insider Preview 的發行前版本。

Win32 應用程式隔離是 Windows 中即將推出的一個安全性功能,如果應用程式受到危害,它可以幫助遏制損害並保護使用者隱私選擇。 此功能是建立在 AppContainer 以及虛擬化資源並提供對其他資源的代理存取權的元件的基礎上。 如需可協助您隔離應用程式的文件和工具,請參閱歡迎使用 Win32 應用程式隔離存放庫

應用程式功能

應用程式功能 (例如 internetClient、位置、麥克風和藍牙) 大部分與在 AppContainer 中執行的封裝應用程式 有關。 因此,這包括所有 通用 Windows 平台 (UWP) 應用程式,以及一些 桌面應用程式。

但在某些情況下,即使是 Medium IL 應用程式 (即不是 AppContainer 應用程式) 也應該宣告功能。 runFullTrust 受限功能就是一個範例。

如需應用程式功能、它們適用於哪些類型的應用程式以及如何設定它們的詳細資料,請參閱應用程式功能宣告。 您可以在應用程式套件資訊清單中設定功能;這就是為什麼它們僅適用於封裝的應用程式。

應用程式的類型

桌面應用程式和通用 Windows 平台 (UWP) 應用程式是兩種主要的應用程式類型 — 儘管桌面應用程式 系列中有數種應用程式。 選擇使用者介面 (UI) 架構 (WinForms、WPF、Win32、Direct 2D/3D、UWP 或 WinUI 3) 是一種選項,它在某種程度上與本主題所述的設定無關。

但讓我們來看看這些應用程式類型在封裝、部署和程序方面彼此有何不同。

首先,所有 UWP 應用程式都被封裝並在 AppContainer 中執行。 但對於桌面應用程式來說,事情更具彈性。 您可以選擇封裝或不封裝您的桌面應用程式。 而且,無論該決定如何,您都可以選擇將桌面應用程式設定為 AppContainer 或 Medium IL 應用程式。

封裝 未封裝
AppContainer 傳統型應用程式
UWP 應用程式
傳統型應用程式
Medium IL 傳統型應用程式 傳統型應用程式

對於封裝的應用程式,若要設定您想要的應用程式類型,請在應用程式套件資訊清單中使用 uap10:RuntimeBehavior 屬性 (請參閱應用程式 (Windows 10))。

  • 桌面應用程式是 Windows .exe,通常具有 mainWinMain 進入點函式。 若要將您的應用程式設定為桌面應用程式,請將 uap10:RuntimeBehavior 設為 "packagedClassicApp" 或 "win32App"。
    • 值 "packagedClassicApp" 表示 WinUI 3 應用程式 (Windows App SDK) 或 Desktop Bridge 應用程式 (Centennial)。 不同之處在於 Centennial 應用程式會在 AppContainer 中執行。
    • 而 "win32App" 表示任何其他類型的 Win32 應用程式 (包括使用外部位置封裝的應用程式)。
  • 最後,將 uap10:RuntimeBehavior 設為 "windowsApp" 會為您提供 UWP 應用程式。

如需您可開發的應用程式類型的所有選項,請參閱 Windows 應用程式開發:選項和功能

Windows 應用程式 SDK — 架構相依或獨立

如果您要開發或維護使用 Windows 應用程式 SDK 的應用程式,那麼您需要做出進一步的決定。 因為有下列兩種方式可讓您部署應用程式相依的 Windows 應用程式 SDK:

  • 架構相依 (預設)。 您的應用程式需要 Windows 應用程式 SDK 執行階段和/或架構套件存在於目標電腦上。
  • 獨立。 您的應用程式附帶其 Windows 應用程式 SDK 相依性。

如需詳細資訊,請參閱 Windows 應用程式 SDK 部署概觀

Windows 封裝管理員和 WinGet 用戶端

封裝管理員可藉由自動化工作流程來協助使用者安裝/升級/設定軟體。 封裝管理員可協助安裝任何軟體,但通常用來安裝開發人員工具。 因此,如果您要建置開發人員工具,則可能對此選項有部分興趣。 這就是其運作方式:

  • 身為軟體開發人員,您可以定義封裝管理員 (以宣告式指示的形式) 所有成功安裝產品所需的部分。
  • 然後,當使用者安裝軟體時,封裝管理員會遵循宣告式指示,將安裝與設定工作流程自動化。

結果會是縮短使用者環境就緒所花費的時間,以及安裝元件之間的更佳相容性。 您可以使用 Windows 封裝管理員,以 .msix.msi.exe 等格式,散發已封裝或解除封裝的應用程式。

有關詳細資訊,請參閱 Windows 封裝管理員