匯出 (0) 列印
全部展開
資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

應用程式套件與部署 (Windows 執行階段應用程式)

Applies to Windows and Windows Phone

身為開發人員,您不該撰寫常式來安裝或解除安裝 Windows 執行階段應用程式。而是應該將應用程式封裝後提交到市集。使用者會從市集取得以「應用程式套件」形式提供的應用程式。 作業系統使用應用程式套件中的資訊安裝應用程式,並且在使用者解除安裝應用程式之後,確保該應用程式不會在裝置上留下任何資訊。

應用程式套件是根據開放式封裝慣例 (OPC) 標準的容器。OPC 定義了使用標準 ZIP 檔案來儲存應用程式資料與資源的結構化方法。如需使用 Microsoft Visual Studio 來部署應用程式套件的相關資訊,請參閱從 Visual Studio 部署 Windows 執行階段應用程式

從 Windows 8.1 和 Windows Phone 8.1 開始,新的應用程式套件組合可協助將應用程式的封裝與發佈最佳化。資源套件則讓您可以提供額外的項目 (例如當地語系化或用於高解析度顯示器的資產) 給需要的客戶,而不會影響不需要這些項目之客戶的磁碟空間、頻寬或應用程式購買體驗。此外,永久連結可以在不需多次下載相同檔案的情況下消除資料重複情形,進而將您應用程式的安裝最佳化。

Windows 執行階段應用程式部署

Windows 執行階段應用程式模型是一種宣告式的狀態驅動程序,能夠為單一套件中的應用程式提供所有安裝和更新的資料與指示。在這個宣告式模型中,部署作業是非常可靠的。 套件隨附的檔案是不可變的檔案,這表示它們自傳送到裝置後即未曾修改過。 因為套件擁有者不需要撰寫自訂動作和程式碼,所以發生的失敗點數目也會隨之減少。

在更新程序期間,系統會下載新的應用程式版本,並將它安裝到使用者設定檔;接著會立即從裝置移除舊版的應用程式。相較於 Windows Installer,這裡沒有修補檔案或用來部署 Windows 執行階段應用程式的任何其他檔案的概念。

  • Applies to Windows

附註  

在 Windows 上,由於 Windows 執行階段應用程式會安裝到使用者設定檔,因此每位使用者都能夠完全控制自己的 Windows 市集應用程式。使用者可以安裝、更新和移除應用程式,而且不會影響裝置上其他使用者的應用程式。

如需部署的詳細資訊,請參閱 Windows 執行階段應用程式的部署

Windows 執行階段應用程式套件 - .appx

定義 Windows 執行階段應用程式的所有元件都儲存在 Windows 執行階段應用程式套件中。這個 Windows 執行階段應用程式套件的副檔名為 .appx,並且是 Windows 執行階段應用程式的安裝單元。 Windows 執行階段應用程式套件是 ZIP 格式的容器檔案,定義為 ISO 和 ECMA 開放式封裝慣例 (OPC) 標準的子集。 每個 Windows 執行階段應用程式套件都包含應用程式的承載檔案,以及驗證、部署、管理和更新應用程式所需的資訊。 大致來說,每個 Windows 執行階段應用程式套件包含以下項目:

應用程式承載

應用程式程式碼檔案和資產

承載檔案是您建立 Windows 執行階段應用程式時所撰寫的程式碼檔案和資產。

應用程式資訊清單

應用程式資訊清單檔案 (Package.appxmanifest)

應用程式資訊清單會宣告應用程式的身分識別、應用程式功能以及部署和更新所需的資訊。 如需應用程式資訊清單檔案的詳細資訊,請參閱應用程式套件資訊清單

應用程式區塊對應

應用程式套件的區塊對應檔案 (AppxBlockMap.xml)

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

應用程式簽章

應用程式套件的數位簽章檔案 (AppxSignature.p7x)

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

上述的這些項目會組成一個可部署到 Windows 8 和更新版本及 Windows Phone 8.1 和更新版本的完整獨立的 Windows 執行階段應用程式。 您要為應用程式建立應用程式承載和資訊清單檔案。 當 Visual Studio 封裝您的應用程式時,它會自動將應用程式區塊對應和簽章檔案新增到套件中。不過,如果您想要手動封裝您的應用程式,也可以使用獨立 MakeAppxSignTool 公用程式。 以下小節說明如何封裝和部署 Windows 執行階段應用程式。

套件識別資料

這是應用程式套件其中一個最基本的部分,它由用來定義套件的 5 個 Tuple 所組成。這個 Tuple 稱為「套件識別資料」,包含下列資料:

Name

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

附註  這個名稱不一定是顯示在應用程式磚上的名稱。

Publisher

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

Version

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

附註  您必須使用版本描述元的全部 4 個部分。

ProcessorArchitecture

應用程式套件的目標架構。這個值可以是 "x86"、"x64"、"arm" 或 "neutral"。在許多情況下,這個欄位可以是用來表示所有架構的 "neutral"。

ResourceID

選擇性。

由發行者指定的字串,用以指定應用程式套件的資源。Tuple 的這個部分主要用於應用程式套件含有地區特定資產的情況下,例如語言。

如果您正在手動建立套件,請參閱 Identity 元素。

套件格式

我們在此將詳細說明應用程式套件的檔案格式 (.appx)。

應用程式套件是唯讀的

雖然應用程式套件的基礎為 OPC 子集,但是建議您不要使用現有 API 修改 OPC 或 ZIP 檔案來編輯應用程式套件。在您建立應用程式套件後,請將套件視為唯讀。 Visual Studio 和建立應用程式套件的 MakeAppx 程序會自動產生 AppxBlockMap.xml 檔案,並將它新增到套件中。如果變更了任何套件內容,則必須將套件的區塊對應檔案更新為相符的檔案。 若要建立新的套件和區塊對應檔案,您必須使用 Visual Studio、MakeAppx pack 命令或 Windows 8 原生程式碼 IAppxPackageWriter API 重建套件。

應用程式套件承載檔案名稱

為遵守 OPC 的規範,儲存在應用程式套件中所有檔案的檔案路徑名稱必須符合統一資源識別元 (URI) 的標準。當儲存在應用程式套件內時,未符合 URI 標準的檔案路徑必須進行百分比編碼,而從套件解壓縮時,檔案路徑會解碼回原始的檔案路徑。例如,假設這個承載檔案的路徑和名稱內含空格和 URI 保留字元 ('[' 和 ']'):


\my pictures\kids party[3].jpg

當這個承載檔案儲存在應用程式套件內時,檔案的路徑會成為:


/my%20pictures/kids%20party%5B3%5D.jpg

Visual Studio、應用程式封裝工具 (MakeAppx) 以及封裝 API 會自動處理檔案路徑的百分比編碼和解碼。如果嘗試使用一般 ZIP 公用程式或 API 直接從應用程式套件解壓縮檔案,檔案路徑可能仍是經過百分比編碼的路徑。因此,建議您使用 MakeAppx unpack 命令或 IAppxPackageReader API 從應用程式套件解壓縮檔案。

應用程式套件容量

應用程式套件支援的應用程式容量限制如下:

套件容量最大值
檔案計數100,000 個檔案
套件大小100 GB

 

應用程式套件的保留路徑和檔案名稱

這些是保留的路徑和檔案名稱,因此請勿將它們用於應用程式承載檔案:

保留的路徑和檔案名稱用途
/Package.appxmanifest專為開發人員撰寫的應用程式套件資訊清單保留的檔案名稱
/AppxBlockMap.xml專為應用程式套件區塊對應保留的檔案名稱
/AppxSignature.p7x專為應用程式套件 Microsoft Authenticode 數位簽章保留的檔案名稱
/[Content_Types].xml專為應用程式套件中 OPC 要求的內容類型中繼資料保留的檔案名稱
/AppxMetadata/專為應用程式套件中繼資料檔案保留的資料夾路徑
/Microsoft.System.Package.Metadata/專為部署的應用程式套件保留的 Microsoft 中繼資料檔案資料夾路徑

 

應用程式套件數位簽章

您必須先簽署每個應用程式套件,使用者才能夠安裝應用程式套件。雖然應用程式套件簽署有部分是透過 Authenticode 自動完成的,但是當您簽署應用程式套件時,必須控制下列功能:

  • 程式碼簽署憑證的主體名稱必須與 Publisher 屬性 (在應用程式套件 AppxManifest.xml 檔案的 Identity 元素中指定) 相符。
  • 用於簽署應用程式套件的雜湊演算法必須與用於產生應用程式套件中 AppxBlockMap.xml 檔案的雜湊演算法相符。這個雜湊演算法會在 BlockMap 元素的 HashMethod 屬性中指定。
  • 應用程式套件不得分開進行簽署程序的時間戳記程序。如需時間戳記,請務必在簽署期間加入時間戳記。
  • 應用程式套件不支援多個包裹的簽章。

套件的簽章會決定 Windows 執行階段應用程式獲得授權的方式。應用程式取得授權的方式會影響應用程式安裝和執行的方式,因此在安裝期間,即使是兩個擁有相同套件識別資料的應用程式套件,也可能會被視為不同的套件。例如,如果要安裝的應用程式套件與另一個已安裝的應用程式具有相同的套件識別資料,但沒有相同的簽章,您就無法將這兩個應用程式套件安裝為相同的應用程式套件。

宣告式安裝

Windows 執行階段應用程式部署是一種使用應用程式套件資訊清單的純宣告式程序。您使用應用程式套件資訊清單擷取要與作業系統進行的整合。例如,使用應用程式套件資訊清單宣告需要在作業系統使用檔案類型關聯 (例如 .jpg)。

透過這個做法,作業系統便可以完全管理 Windows 執行階段應用程式部署程序,讓眾多裝置上的每個使用者都能擁有一致且可靠的使用經驗。再者,當 Windows 執行階段應用程式使用宣告式安裝時,解除安裝應用程式的程序會變得更加準確且可重複使用。

在應用程式套件資訊清單中,您可以宣告多種技術做為 Windows 執行階段應用程式安裝的一部分。

  • Applies to Windows

應用程式先決條件

為成功部署應用程式,作業系統必須滿足該應用程式在應用程式套件資訊清單指出的所有先決條件。例如,如果某個作業系統版本公開了一個 Windows 執行階段應用程式要呼叫的新 API,應用程式就會針對該特定的最小作業系統版本宣告一個先決條件。在這個情況下,目標裝置上必須有適當的作業系統才能安裝這個應用程式。在 Windows 8 和更新版本以及 Windows Phone 8.1 和更新版本中,您可以在應用程式套件資訊清單中宣告以下這些主要的先決條件類型:

OSMinVersion

指定允許執行這個應用程式的作業系統最小版本和應用程式模型平台。

OSMaxVersionTested

指定這個應用程式已通過開發人員測試且可以正常運作的作業系統最高版本。作業系統會使用這個先決條件欄位來判斷使用這個應用程式時是否會發生任何應用程式相容性問題。例如,如果應用程式要呼叫 Windows 8 SDK 中的 API,而該 API 在後續的作業系統版本中進行了變更,則這個應用程式可能無法正確運作。這個先決條件欄位可協助確保作業系統能夠識別並更正這個行為,讓應用程式可以在後續的所有作業系統版本上繼續正常運作。

功能

Windows 執行階段應用程式如果需要以程式設計方式存取使用者資源 (例如,[圖片]) 或連接的裝置 (例如,網路攝影機),必須宣告適當的功能。應用程式可以藉由在應用程式套件資訊清單中宣告功能來要求存取權。您可以在 Visual Studio 中使用資訊清單設計工具來宣告功能,也可以手動將它們新增至套件資訊清單,如如何在套件資訊清單中指定功能中所述。如需功能的詳細資訊,請參閱應用程式功能宣告

  • Applies to Windows

相依性

市集會裝載一組獨特的應用程式套件,這些套件包含一些獨立於作業系統而提供服務的作業系統元件。Windows 執行階段應用程式可以在應用程式套件資訊清單中宣告相依性以使用這些應用程式套件。這些元件包含在市集所裝載的應用程式套件 (稱為作業系統元件程式庫) 中。將應用程式安裝在裝置上時,市集會管理確保是否有正確元件程式庫版本的程序。 這些程式庫 (包含適用於 JavaScript 的 Windows Library、C++ 執行階段程式庫 (CRT) 以及 PlayReady DRM) 對建立 Windows 執行階段應用程式來說非常重要。從市集部署應用程式時,作業系統會在從市集下載應用程式的同時下載並安裝適當的元件程式庫,以便滿足相依性宣告。

若要側載 Windows 市集應用程式以進行測試或企業部署,則必須在部署應用程式套件期間提供和指定 Windows 元件程式庫應用程式套件。

應用程式套件組合

從 Windows 8.1 和 Windows Phone 8.1 開始,您可以使用「應用程式套件組合」 (或 .appxbundle 套件),協助最佳化 Windows 執行階段應用程式和資源套件的封裝程序,並將它們發送給世界各地的使用者。

附註  為您的所有架構建立一個應用程式套件組合,不要為每個架構建立個別的套件組合。

您要為應用程式建立應用程式套件組合裝載。 Visual Studio 會建立並新增套件組合資訊清單。當 Visual Studio 搭售您的應用程式時,它會自動將資源分割成個別套件,並將應用程式區塊對應與簽章檔案新增到套件組合中。這些項目會組成一個完整獨立的 Windows 執行階段應用程式,並可部署到 Windows 8.1 及 Windows Phone 8.1 的系統。

應用程式套件 (.appx)

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

資源套件 (.appx)

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

附註  資源套件絕對不能包含程式碼。

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

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

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

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Bundle xmlns="http://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)

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

資源套件

從 Windows 8.1 和 Windows Phone 8.1 開始,您可以使用「資源套件」來包含核心應用程式的額外資源 (例如,法語專用的資產,像是字串或影像)。使用這些資源套件,您可以將核心應用程式套件與這些額外資源分開。 如此一來,資源套件就能用來量身打造應用程式的整體經驗,而不需要將所有資源套件都下載並安裝到裝置上。

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

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

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

資源套件在應用程式模型中有下列用途:

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

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

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

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

永久連結

從 Windows 8.1 和 Windows Phone 8.1 開始,作業系統在安裝您的應用程式時不會多次下載相同檔案 (如果可行),以將安裝最佳化。也就是說,如果作業系統判斷您的應用程式會使用先前已經安裝在裝置上的檔案,作業系統就會建立該檔案的共用版本,然後為您的應用程式建立連至該共用版本的永久連結。這樣能夠減少應用程式的安裝時間和磁碟使用量。這些共用檔案可以是程式庫、執行階段等。若要利用永久連結,建議您依照最佳做法來進行。例如,除非您絕對需要更新執行階段或程式庫二進位檔,否則,在使用應用程式的每個版本時,盡可能總是嘗試重複使用相同的執行階段或程式庫二進位檔。

  • Applies to Windows

Windows 8.1 更新 :  針對 Windows 8.1 的初始版本,永久連結僅限用於來自 Windows 市集的應用程式。針對 Windows 8.1 更新,則可以在側載企業應用程式時進一步啟用永久連結。如需側載的詳細資訊,請參閱部署企業應用程式

每個使用者部署

  • Applies to Windows

附註  

Windows 執行階段應用程式以每個使用者為單位進行部署,這表示它們只會影響安裝它們的使用者帳戶。此外,在多個使用者的情況下,使用者不會知道其他使用者安裝了哪些應用程式。例如,假設 UserA 安裝了「記事本」應用程式,而 UserB 安裝了「小算盤」應用程式。在這個情況下,UserA 和 UserB 彼此都不知道對方在同一台電腦上安裝了哪些其他應用程式 (應用程式隔離)。

  • Applies to Windows

附註  

作業系統上的應用程式隔離僅限於 Windows 執行階段應用程式的使用者部分。所有其他來自應用程式的資料都儲存在作業系統可以存取的位置。例如,假設 UserA 安裝了「小算盤」應用程式,而 UserB 也安裝了「小算盤」應用程式;在這個情況下,磁碟機 (%ProgramFiles%\WindowsApps) 上只會儲存一份「小算盤」應用程式二進位檔,而兩位使用者都可以進行存取。UserA 看不到 UserB 的應用程式資料,反之亦然。雖然會共用執行階段二進位檔,但是應用程式資料仍是相互隔離的。

%ProgramFiles%\WindowsApps 目錄不可以變更。這也包含下層的 %ProgramFiles% 目錄以及 %ProgramData% 和 %UserProfile% 目錄。

  • Applies to Windows

附註  

除了在系統上包含全部使用者的所有 Windows 市集應用程式二進位檔,WindowsApps 目錄也會包含同一個 Windows 市集應用程式的多個版本。例如,假設 UserA 和 UserB 都安裝了「記事本」應用程式,而 UserA 將「記事本」應用程式更新到版本 2,但 UserB 並沒有。在這個情況下,作業系統中會同時有兩個版本的「記事本」應用程式。由於每個使用者都只安裝了一個版本,因此多個版本彼此不會發生衝突。

這個行為也適用於相依性套件。

Windows 執行階段應用程式的部署

以下小節描述安裝、更新以及移除 Windows 執行階段應用程式的流程。

安裝 Windows 執行階段應用程式

下圖說明安裝 Windows 執行階段應用程式的流程:

Windows 市集應用程式安裝流程

Windows 執行階段應用程式部署程序含多個階段。首先,作業系統會取得並驗證應用程式資訊清單應用程式區塊對應以及應用程式簽章。接下來,作業系統會檢查應用程式套件的部署條件,確保應用程式部署能夠順利完成。然後作業系統會將套件二進位檔暫存到 WindowsApps 目錄。最後,作業系統會在使用者帳戶中登錄這個套件。

部署檢查 (驗證)

下圖顯示作業系統執行部署檢查的階段:

部署安裝檢查

在使用者開始安裝 Windows 執行階段應用程式後,作業系統必須先完成這些檢查才能開始進行部署程序:

必須符合 OSMinVersion

應用程式套件資訊清單內指定應用程式先決條件。這些條件會敘述必須滿足的作業系統最小版本需求。如需應用程式先決條件的詳細資訊,請參閱應用程式先決條件

必須符合應用程式相依性

Windows 執行階段應用程式可以陳述應用程式所需的新增功能必須相依於另一個應用程式套件。如需應用程式相依性的詳細資訊,請參閱相依性

磁碟空間必須足夠

每個 Windows 執行階段應用程式都必須有特定大小的磁碟空間才能順利部署。如果裝置上沒有足夠的磁碟空間可以部署套件,部署就會失敗。

應用程式尚未部署

如果特定使用者已安裝某個 Windows 執行階段應用程式,則不得重複安裝該應用程式,因此必須執行目前是否未安裝這個應用程式的檢查。

應用程式資產必須通過簽章檢查

使用已通過驗證的 BlockMap 時,應用程式套件中的每個檔案都必須通過完整性檢查。

套件暫存

下圖顯示作業系統暫存套件的階段:

部署套件暫存

在應用程式模型判斷可以將套件部署在裝置上之後,作業系統會將套件的內容儲存在磁碟的 %ProgramFiles%\WindowsApps 目錄底下的新目錄中 (新目錄會以套件識別資料命名):


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

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

套件登錄

下圖顯示作業系統登錄套件的階段:

部署套件登錄

套件登錄是部署程序的最終階段。在這個階段期間,會在作業系統中登錄資訊清單內所宣告的延伸。這樣可以讓應用程式更緊密地與作業系統整合。例如,如果想讓應用程式能夠開啟 .txt 檔案,請在應用程式套件資訊清單中將 FileTypeAssociation 延伸宣告為 XML,並將檔案類型指定為 .txt。在部署期間,這個 XML 會轉譯成一組必須發生的系統變更,以便正確地將應用程式登錄為能夠處理 .txt 檔案。接著由應用程式模型代替應用程式進行這些變更。應用程式模型支援多種不同的延伸。如需這些延伸的詳細資訊,請參閱應用程式協定與延伸

更新 Windows 執行階段應用程式

下圖說明更新 Windows 執行階段應用程式的流程:

部署更新

更新的工作流程與安裝 Windows 執行階段應用程式的工作流程類似,但是因為更新程序的獨特性,這兩者間還是有一些重要的差異。

更新的部署檢查

下圖顯示更新時作業系統執行部署檢查的階段:

部署更新檢查

如果目前安裝的應用程式套件版本大於或等於使用者嘗試安裝的版本,部署將不會成功。

套件暫存 (差異下載)

下圖顯示作業系統暫存更新的套件的階段:

部署更新暫存

更新期間的暫存程序與安裝期間的一般暫存程序類似。主要的不同在於更新時期的作業系統上已經安裝了既存版本的套件。完成既存的套件安裝程序之後,系統會下載一組承載檔案,並將這些檔案複製到裝置中。在多數情況下,這些承載檔案在應用程式套件的更新版本中多數將不會變更或只會有些微的變更。您可以使用這些承載檔案來建構更新的應用程式套件內容和資產。由於應用程式套件的 BlockMap 結構包含一份雜湊清單 (內容針對每個檔案的每一區段),因此作業系統可以透過比較舊的和新的應用程式 BlockMap 檔案來精確計算區塊層級的變更。以下是這個比較可能得到的結果:

檔案沒有變更

這個檔案會永久連結到更新的套件資料夾位置。

檔案中的區塊沒有變更

沒有變更的區塊會複製到更新的套件資料夾。

檔案中的區塊已經變更

變更的區塊會標記為要從來源下載。

整個檔案都是新的

將從來源下載整個檔案。

檔案已經不存在

更新時不會用到這個檔案。

比較完成後,可以保留的資料會被永久連結或複製,並會從來源下載新的資料,用來建立更新檔案。

更新的套件登錄

下圖顯示作業系統登錄更新的套件的階段:

部署更新套件登錄

更新套件的登錄時,作業系統也必須更新舊版的登錄。應用程式模型會根據舊版和新版應用程式資訊清單內的宣告,自動更新任何現有延伸登錄、移除過時的登錄以及登錄新的延伸。

使用中的應用程式

從作業系統取消登錄應用程式套件的程序包含移除允許作業系統啟動 Windows 執行階段應用程式的內部項目。在某些情況下,應用程式可以在更新時繼續執行。在這個情況下,部署引擎會要求應用程式先暫停,然後終止。更新程序的成功或失敗取決於該要求的結果。作業成功時,系統也會在登錄新版應用程式套件和取消登錄舊版應用程式套件時,讓應用程式在一段短暫的時間內無法啟動。完成這個階段後,就能夠重新啟動應用程式了。

應用程式資料

應用程式資料是一個實體,其版本與實際的 Windows 執行階段應用程式無關。因此,如果 ApplicationData.Version 沒有隨著 Windows 執行階段應用程式的更新一起更新,應用程式狀態就不會受到 Windows 執行階段應用程式更新所影響。

套件取消暫存

下圖顯示作業系統取消暫存更新的套件的階段:

部署更新套件取消暫存

在登錄作業順利完成後,既存的套件版本如果在作業系統上沒有任何其他使用者正在使用該套件,就會被標示成要從作業系統移除。起初,作業系統會將既存版本的應用程式套件資料夾複製到 %ProgramFiles%\WindowsApps\Deleted 目錄。沒有其他進行中的部署作業時,作業系統就會刪除既存版本的應用程式套件資料夾。

  • Applies to Windows

附註  在多個使用者的情況下,這個應用程式套件可能仍安裝於作業系統中,因為其他使用者還需要使用它。在這個情況下,必須等到所有使用者皆已經移除這個套件內容,才能將該套件內容從作業系統取消暫存。

移除 Windows 執行階段應用程式

下圖說明移除 Windows 執行階段應用程式的流程:

部署移除

  • Applies to Windows

附註  與個別使用者在電腦上安裝套件的方式類似,套件也只能由個別使用者移除。如果多個使用者皆安裝了這個 Windows 市集應用程式,則只會取消登錄目前的使用者。例如,如果 UserA 和 UserB 皆安裝「小算盤」應用程式,但是 UserA 解除安裝了該應用程式,則只會移除 UserA 的應用程式,但不會移除 UserB 的應用程式。移除程序與更新程序有相同的基本階段。

套件取消登錄

下圖顯示作業系統取消登錄移除的套件的階段:

部署移除套件取消登錄

取消登錄程序是移除 Windows 執行階段應用程式與使用者帳戶的整合關係的程序。系統也會移除任何安裝到使用者帳戶的關聯資料,例如應用程式狀態。與更新程序類似,部署引擎必須透過處理程序生命週期管理員 (PLM) 要求應用程式暫停並終止,才能讓應用程式從使用者的帳戶中取消登錄。

附註  在 PLM 傳回資料之後,移除作業會繼續將 Windows 執行階段應用程式從使用者帳戶中取消登錄。即使 PLM 執行失敗,這項作業也會繼續。

套件取消暫存

下圖顯示作業系統取消暫存移除的套件的階段:

部署移除套件取消暫存

在取消登錄作業順利完成後,套件如果在作業系統上沒有任何其他使用者正在使用它,就會被標示成要從作業系統移除。起初,作業系統會將套件的應用程式套件資料夾複製到 %ProgramFiles%\WindowsApps\Deleted 目錄。沒有其他進行中的部署作業時,作業系統就會刪除套件的應用程式套件資料夾。

  • Applies to Windows

附註  

在多個使用者的情況下,這個應用程式套件可能仍安裝於作業系統中,因為其他使用者還需要使用它。在這個情況下,必須等到所有使用者皆已經移除這個套件內容,才能將該套件內容從作業系統取消暫存。

應用程式套件組合部署

從 Windows 8.1 和 Windows Phone 8.1 開始,您可以部署應用程式套件組合,以將應用程式的封裝與發佈最佳化。

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

應用程式封裝流程

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

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

驗證

在使用者開始安裝 Windows 執行階段應用程式後,作業系統必須先完成這些檢查才能開始進行部署程序。

測試條件

架構支援

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

最低作業系統版本

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

應用程式相依性

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

磁碟空間

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

簽章檢查

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

 

套件適用性

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

限定詞說明

使用者語言

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

系統縮放

所有監視器的縮放值會被用來判斷最終要部署的適用縮放資源套件組。如果是 Windows 8.1 和更新版本以及 Windows Phone 8.1 和更新版本,建議您使用以下縮放係數,供資源套件使用。

Windows 8.1 以及更新版本:  scale-100scale-140 以及 scale-180

Windows Phone 8.1 和更新版本:  scale-100scale-140 以及 scale-240

DirectX 功能層級

系統上可用的所有 DirectX 功能層級都會被用來判斷最終要部署的適用 DirectX 資源套件組。Windows 8.1 和更新版本以及 Windows Phone 8.1 和更新版本針對資源套件支援下列三個 DirectX 功能層級:DXFL-DX9DXFL-DX10 以及 DXFL-DX11

 

套件暫存

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

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

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

套件登錄

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

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

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

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

清查套件

安裝、更新和移除 Windows 執行階段應用程式後,指定使用者可以隨時檢視哪些應用程式套件已安裝或已預先暫存。

  • Applies to Windows

附註  擁有系統管理員權限的使用者也可以決定系統上的哪些應用程式套件是安裝給所有使用者使用。如需如何清查作業系統中套件的詳細資訊,請參閱工具與 PowerShell Cmdlet

常見問題集

如何同時安裝多個套件?

您可以對封裝 API 進行多次呼叫來安裝多個套件,或一次呼叫一整組套件來進行安裝。在應用程式套件等待部署時,應用程式模型的基礎實作沒有任何應用程式套件的數量限制。但是每個使用者最多只能有 3 個並行的暫存作業 (每個作業系統總共只能有 7 個同時進行的暫存作業),而每個作業系統最多只能有一個登錄作業。

如果已經安裝套件,會發生什麼事?

如果已經安裝套件,則表示目前使用者帳戶已經登錄擁有相同套件識別資料的套件。在這個情況下,不會安裝完全相同的套件。

是否可以將更新設為強制性?

您無法透過應用程式模型來強制執行更新。更新模型完全是選擇性的。在少數的情況下,市集能夠認可某個更新以較高優先順序更新的方式 (例如,安全性問題修正) 進行散佈。在這個情況下,更新就可以強制部署到用戶端。

  • Applies to Windows

附註  

在企業中,您可以透過群組原則來強制執行更新。

如何將更新回復為先前的版本?

您無法將 Windows 執行階段應用程式回復為舊版的應用程式。由於應用程式套件資料已在套件解除安裝後不久從作業系統中移除,因此無法加以還原。

是否可以移動我的 %ProgramFiles%、%ProgramData% 或 %UserProfile% 目錄?

Windows 執行階段應用程式不支援這個狀況,這會讓應用程式在使用時發生錯誤。

封裝與部署開發介面

Windows 執行階段

Win32/COM

 

 

顯示:
© 2015 Microsoft