應用程式封裝

在 Windows 8.1 中,新的應用程式套件組合讓應用程式的提交比過去更簡單。資源套件則讓您可以提供額外的項目 (例如當地語系化或用於高解析度顯示器的資產) 給需要的使用者,而不會影響不需要這些項目之客戶的磁碟空間、頻寬或應用程式購買體驗。

如需如何使用應用程式套件組合來進行智慧型應用程式部署的特定範例,請參閱建立 Windows 市集 DirectX 遊戲的套件主題和含有資源套件的遊戲範例

  • 應用程式資源
  • 應用程式套件組合
  • 套件識別資料
  • 應用程式套件組合部署

應用程式資源

Windows 8.1 將新的套件類型導入到應用程式模型。「資源套件」**可以讓您將核心應用程式套件與額外的資源 (例如法語特定的資產,像是字串或影像) 分開,然後將這些資源包含在它們自己的套件中。如此一來,資源套件就能用來量身打造應用程式的整體經驗,而不需要將所有資源套件都下載並安裝到電腦上。

資源套件是選用的,應用程式套件不會依賴這些套件來運作。這表示應用程式套件必須至少包含一組預設資源,就算電腦沒有安裝任何資源套件,也能使用該資源。這樣可協助確保一些重要的承諾:

  • 即使沒有資源套件,也能在任何電腦上安裝並正確啟動應用程式套件。

  • 如果安裝的資源套件不完整,應用程式套件也有可以回復的資源。

資源套件在應用程式模型中有兩種用途:

  • 提供資源候選項目,讓資源管理系統可以在應用程式執行時,量身打造應用程式的使用體驗。

  • 提供中繼資料,讓資源套件可以將目標設定為特定的資源限定詞 (例如,使用者縮放、系統縮放及 Microsoft DirectX 功能)。

資源套件每一套件只能以一個資源限定詞做為目標。不過,您的應用程式可以擁有許多資源套件。

應用程式套件組合

除了資源套件之外,Windows 8.1 還導入了「應用程式套件組合」**(或 .appxbundle 套件),協助最佳化 Windows 市集應用程式和資源套件的封裝程序,並將它們發送給世界各地的使用者。

您要為應用程式建立應用程式套件組合裝載。 Visual Studio 會建立並新增套件組合資訊清單。當 Microsoft Visual Studio Express 2013 for Windows 搭售您的應用程式時,它會自動將資源分割成個別套件,並將應用程式區塊對應與簽章檔案新增到套件組合中。下列項目會組成一個完整獨立的 Windows 市集應用程式,可部署到 Windows 8.1 及更新版本的系統。

應用程式套件 (.appx)

應用程式套件組合可以包含多個應用程式套件,前提是各自以不同的特定架構為目標。例如,它可以同時包含 X86.appx 和 amd64.appx 套件,但不能包含兩個 amd64.appx 套件。

資源套件 (.appx)

應用程式套件組合包含語言、縮放及 DirectX 功能層級的資源套件 (.appx 檔案)。每個應用程式套件組合可以包含多個不同的資源套件,以支援不同的裝置設定。直接參考 Windows 市集應用程式中的資源套件時,您應該完全使用資源管理系統。

注意  資源套件絕對不能包含程式碼。

應用程式套件組合資訊清單 (AppxBundleManifest.xml)

應用程式套件組合資訊清單 (.appxbundlemanifest 檔案) 包含所有內含套件的相關適用性資訊。針對任何特定的套件,它會指定套件的類型 ("Application" 或 "Resource") 加上版本和資源目標設定資訊。特別針對應用程式套件,應用程式套件組合資訊清單還包含了架構相關資訊。

一般而言,應用程式套件組合資訊清單可讓 Windows 8.1 應用程式模型了解應用程式套件組合的內容,並在安裝階段決定應該在使用者裝置上安裝哪些應用程式套件與資源套件。

以下是應用程式套件組合資訊清單檔案的範例。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Bundle xmlns="https://schemas.microsoft.com/appx/2013/bundle" SchemaVersion="1.0">
  <Identity Name="Example" Publisher="CN=ExamplePublisher" Version="2013.101.312.1053"/>
  <Packages>
    <Package Type="application" Version="1.0.0.5" Architecture="x86" FileName="AppPackage_X86.appx" Offset="49" Size="3207">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="application" Version="1.0.0.4" Architecture="x64" FileName="AppPackage_X64.appx" Offset="3329" Size="3204">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.0" ResourceId="French" FileName="ResourcePackage_French.appx" Offset="6606" Size="1423">
      <Resources>
        <Resource Language="fr"/>
        <Resource Language="fr-fr"/>
        <Resource Language="fr-ca"/>
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.3" ResourceId="HiRes" FileName="ResourcePackage_HiRes.appx" Offset="8111" Size="1584">
      <Resources>
        <Resource Scale="140"/>
      </Resources>
    </Package>
  </Packages>
</Bundle>

應用程式區塊對應 (AppxBlockMap.xml)

區塊對應檔案會列出套件組合中包含的所有檔案 (應用程式和資源套件除外),以及作業系統用來驗證檔案完整性和將應用程式更新最佳化的相關加密編譯雜湊值。如需區塊對應檔案的詳細資訊,請參閱應用程式套件區塊對應

應用程式簽章 (AppxSignature.p7x)

應用程式套件組合簽章可以確保套件和內容在簽署後未遭到任何修改。如果簽署憑證的驗證為信任的根憑證授權單位憑證,則簽章也會指出簽署套件的人。套件的簽署人通常為應用程式的發行者或作者。

注意  如果您想要手動組合您的應用程式,您可以使用獨立的 MakeAppxSignTool 公用程式。如需深入了解如何搭售與部署 Windows 市集應用程式,請參閱封裝、部署及查詢 Windows 市集應用程式

套件識別資料

與 Windows 8 應用程式套件類似,應用程式套件組合最基本的元素就是識別套件組合的 5 個 Tuple。這稱為「套件識別資料」**,由這些資料組成。

屬性 說明
名稱

應用程式套件使用的通用名稱。例如,"myCompany.mySuite.myApp"。

注意  這個名稱不一定是顯示在應用程式磚上的名稱。
發行者

Windows 市集應用程式的發行者。在大多數情況下,發行者就是用於註冊 Windows 8 開發人員帳戶的帳戶。

版本

一個由 4 部分組成的版本描述元 (major.minor.build.revision),可供未來的應用程式版本使用 (例如 "1.0.0.0")。

ProcessorArchitecture

預設為中性。

ResourceID

預設為 "~"。

 

應用程式套件組合部署

透過 Windows 市集進行的應用程式套件組合部署會依照這個工作流程執行。

應用程式封裝流程

Windows 市集應用程式部署程序含多個階段。首先,Windows 8.1 會取得並驗證應用程式套件組合資訊清單、套件組合區塊對應以及套件組合簽章。接著,Windows 8.1 會檢查套件組合資訊清單,確保有可以在目前架構上部署的應用程式。找到正確的應用程式套件之後,Windows 8.1 會檢查應用程式套件的部署準則,確保應用程式部署能夠順利完成。

然後,Windows 8.1 會判斷適用於部署的資源套件子集,並將這些套件二進位檔暫存到 \WindowsApps\ 目錄。最後,Windows 8.1 會將應用程式套件與資源套件登錄到使用者的帳戶。

驗證

在使用者開始安裝 Windows 市集應用程式之後,Windows 8.1 必須先完成這些檢查,才能開始進行部署。

測試 條件

架構支援

套件組合最多可以包含三個架構特定的應用程式套件,全部都在應用程式套件組合資訊清單中指定。

最低作業系統版本

您需在應用程式套件資訊清單中指定先決條件。它們表示了特定最低作業系統版本的需求。例如,以 Windows 8.1 來說,適當的版本號碼為 6.3。 如需有關應用程式先決條件的詳細資訊,請參閱應用程式封裝先決條件

應用程式相依性

Windows 市集應用程式可以表示對另一個元件套件的相依性來取得應用程式所需的附加功能。如需應用程式相依性的詳細資訊,請參閱應用程式封裝相依性

磁碟空間

每個 Windows 市集應用程式都需要特定的磁碟空間大小來進行部署。如果沒有足夠的磁碟空間可以部署套件,部署就會失敗。

簽章檢查

應用程式套件中的每個檔案都必須依據已驗證過的 BlockMap 進行完整性檢查。

 

套件適用性

在 Windows 8.1 確認應用程式套件組合可以部署到系統上之後,就會接著判斷哪些資源套件應該隨著該應用程式套件一起部署,以增強使用者經驗。您可以使用下列三種特定的資源限定詞來檢查適用性。

限定詞 說明

使用者語言

使用者新增到偏好語言清單的所有語言都會計入最終要部署的適用語言資源套件組中。Windows 8.1 支援許多資源套件的地區設定和語言

系統縮放

所有監視器的縮放值會被用來判斷最終要部署的適用縮放資源套件組。Windows 8.1 針對資源套件支援三種縮放係數:scale-100scale-140 以及 scale-180

DirectX 功能層級

系統上可用的所有 DirectX 功能層級都會被用來判斷最終要部署的適用 DirectX 資源套件組。Windows 8.1 針對資源套件支援三種 DirectX 功能層級:DXFL-DX9DXFL-DX10DXFL-DX11

 

套件暫存

在 Windows 8.1 確定應用程式套件組合可以部署在系統上以及要部署哪些套件之後,就會將套件內容下載到 \WindowsApps\ 目錄。系統會為每個下載的套件建立一個新目錄,並使用套件識別資料名稱值來命名新目錄,如下所示。

<Package Name>_<Version>_<Architecture>_<ResourceID>_<Publisher Hash>

暫存程序會在部署引擎向套件位置來源發出一組要求時發生。接著來源會接受這些要求,並將它們傳回部署引擎,這些要求會在此解壓縮、與 BlockMap 進行驗證並複製到適當的檔案。

套件登錄

套件登錄是部署程序的最終階段。在這個階段,會發生兩個重要操作:

  • 應用程式套件資訊清單中宣告的延伸會向作業系統進行登錄。這樣可以讓應用程式更緊密地與作業系統整合。例如,如果想要讓應用程式能夠開啟文字 (.txt) 檔,請在應用程式套件資訊清單中以 XML 的形式宣告 FileTypeAssociation 延伸,並指定 ".txt" 做為檔案類型。

    在部署期間,這個 XML 會轉譯成一組必須發生的系統變更,以便正確地將應用程式登錄為能夠處理 .txt 檔案。接著,應用程式模型就會代表應用程式來進行這些變更。應用程式模型支援多種不同的延伸。如需這些延伸的詳細資訊,請參閱應用程式協定與延伸

  • 所有資源套件都會向資源管理系統進行登錄。接著,資源管理系統就可在應用程式執行時,使用這些套件將使用者經驗最佳化。