使用MakeAppx.exe 建立 MSIX 套件或套件組合

MakeAppx.exe 會建立應用程式套件 (.msix 或 .appx) 和應用程式套件套件套件組合 (.msixbundle 或 .appxbundle)。 MakeAppx.exe 也會從應用程式套件或套件組合擷取檔案,並加密或解密應用程式套件和套件組合。 此工具包含在 Windows 10 SDK,而且可以從命令提示字元或指令碼檔案使用。

如需如何使用 MakeApp.exe 封裝傳統型應用程式的相關信息,請參閱 手動封裝傳統型應用程式。

重要

如果您使用 Visual Studio 來開發應用程式,建議您使用 Visual Studio 精靈來建立應用程式套件。 如需詳細資訊,請參閱使用 Visual Studio 封裝 UWP 應用程式,以及使用 Visual Studio 從原始程式碼封裝傳統型應用程式。

重要

請注意,MakeAppx.exe 不會建立應用程式套件上傳檔案 (.appxupload 或 .msixupload),這是建議用來提交至合作夥伴中心的有效應用程式套件類型。 應用程式套件上傳檔案通常會 建立為 Visual Studio 封裝程式的一部分,不過也可以 手動建立。

使用MakeAppx.exe

根據 SDK 的安裝路徑,這是 MakeAppx.exe 位於 Windows 10 計算機上的位置

  • C:\Program Files (x86)\Windows Kits\10\bin\<build number>\<architecture>\makeappx.exe

其中 <architecture> = x86、x64、arm、arm64 或 chpe。 或者,它可能位於:

  • C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe

MakeAppx.exe 語法和選項

一般 MakeAppx.exe 語法:

MakeAppx <command> [options]      

下表描述 MakeAppx.exe命令。

命令 說明
pack 建立套件。
解壓 將指定封裝中的所有檔案解壓縮至指定的輸出目錄。
套件組 建立套件組合。
unbundle 將所有套件解壓縮至指定輸出路徑下以套件組合或套件完整名稱命名的子目錄。
加密 在指定的輸出套件/套件組合上,從輸入套件/套件組合建立加密的應用程式套件或套件組合。
解密 在指定的輸出套件/套件組合上,從輸入應用程式套件/套件組合建立解密的應用程式套件或套件組合。

這個選項清單適用於所有指令:

選項 說明
/d 指定輸入、輸出或內容目錄。
/l 用於當地語系化套件。 當地語系化套件的預設驗證行程。 此選項只會停用該特定驗證,而不需要停用所有驗證。
/Kf 使用指定金鑰檔案中的金鑰,加密或解密套件或套件組合。 這無法與 /kt 搭配使用。
/Kt 使用全域測試金鑰加密或解密套件或套件組合。 這無法與 /kf 搭配使用。
/不 如果輸出檔案存在,則防止覆寫輸出檔案。 如果您未指定此選項或 /o 選項,系統會詢問使用者是否要覆寫檔案。
/內華達州 略過語意驗證。 如果您未指定此選項,此工具會執行封裝的完整驗證。
/o 如果輸出檔案存在,則會覆寫輸出檔案。 如果您未指定此選項或 /no 選項,系統會詢問使用者是否要覆寫檔案。
/p 指定應用程式套件或套件組合。
/v 啟用主控台的詳細資訊記錄輸出。
/? 顯示說明文字。

下列清單包含可能的自變數:

Argument 說明
<輸出套件名稱> 建立之封裝的名稱。 這是附加 .msix 或 .appx 的檔名。
<加密的輸出套件名稱> 所建立加密套件的名稱。 這是附加 .emsix 或 .eappx 的檔名。
<輸入套件名稱> 封裝的名稱。 這是附加 .msix 或 .appx 的檔名。
<加密的輸入套件名稱> 加密套件的名稱。 這是附加 .emsix 或 .eappx 的檔名。
<輸出套件組合名稱> 所建立套件組合的名稱。 這是附加 .msixbundle 或 .appxbundle 的檔名。
<加密的輸出套件組合名稱> 所建立加密套件組合的名稱。 這是附加 .emsixbundle 或 .eappxbundle 的檔名。
<輸入套件組合名稱> 套件組合的名稱。 這是附加 .msixbundle 或 .appxbundle 的檔名。
<加密的輸入套件組合名稱> 加密套件組合的名稱。 這是附加 .emsixbundle 或 .eappxbundle 的檔名。
<內容目錄> 應用程式套件或套件組合內容的路徑。
<對應檔案> 指定封裝來源和目的地的檔名。
<輸出目錄> 輸出套件和套件組合目錄的路徑。
<金鑰檔案> 包含加密或解金鑰的檔名。
<演算法標識碼> 建立區塊對應時所使用的演算法。 有效的演算法包括:SHA256(預設值)、SHA384、SHA512。

建立應用程式套件

應用程式套件是封裝在 .msix 或 .appx 套件檔案中之應用程式檔案的完整集合。 若要使用 pack 命令建立應用程式套件,您必須提供內容目錄或套件位置的對應檔案。 您也可以在建立套件時加密套件。 如果您想要加密封裝,您必須使用 /ep,並指定您是否使用密鑰檔案 (/kf) 或全域測試金鑰 (/kt)。 如需建立加密套件的詳細資訊,請參閱 加密或解密套件或套件組合

pack 命令特有的選項:

選項 說明
/f 指定對應檔。
/h 指定建立區塊對應時要使用的哈希演算法。 這隻能與pack命令搭配使用。 有效的演算法包括:SHA256(預設值)、SHA384、SHA512。
/m 指定輸入應用程式指令清單的路徑,此指令清單將做為產生輸出應用程式套件或資源套件指令清單的基礎。 當您使用此選項時,也必須使用 /f,並在對應檔中包含 [ResourceMetadata] 區段,以指定要包含在產生的指令清單中的資源維度。
/數控 防止壓縮封裝檔案。 根據預設,檔案會根據偵測到的檔類型進行壓縮。
/r 建置資源套件。 這必須與 /m 搭配使用,並表示使用 /l 選項。

下列使用範例顯示 pack 命令的一些可能語法選項:

MakeAppx pack [options] /d <content directory> /p <output package name>
MakeAppx pack [options] /f <mapping file> /p <output package name>
MakeAppx pack [options] /m <app package manifest> /f <mapping file> /p <output package name>
MakeAppx pack [options] /r /m <app package manifest> /f <mapping file> /p <output package name>
MakeAppx pack [options] /d <content directory> /ep <encrypted output package name> /kf <key file>
MakeAppx pack [options] /d <content directory> /ep <encrypted output package name> /kt

下列顯示 pack 命令的命令列範例:

MakeAppx pack /v /h SHA256 /d "C:\My Files" /p MyPackage.msix
MakeAppx pack /v /o /f MyMapping.txt /p MyPackage.msix
MakeAppx pack /m "MyApp\AppxManifest.xml" /f MyMapping.txt /p AppPackage.msix
MakeAppx pack /r /m "MyApp\AppxManifest.xml" /f MyMapping.txt /p ResourcePackage.msix
MakeAppx pack /v /h SHA256 /d "C:\My Files" /ep MyPackage.emsix /kf MyKeyFile.txt
MakeAppx pack /v /h SHA256 /d "C:\My Files" /ep MyPackage.emsix /kt

建立應用程式套件組合

應用程式套件組合類似於應用程式套件,但套件組合可以減少使用者下載的應用程式大小。 例如,應用程式套件組合對於語言特定資產、不同的影像規模資產,或適用於特定 Microsoft DirectX 版本的資源很有説明。 類似於建立加密的應用程式套件,您也可以在組合應用程式時加密應用程式套件組合。 若要加密應用程式套件組合,請使用 /ep 選項,並指定您是否使用密鑰檔案 (/kf) 或全域測試金鑰 (/kt)。 如需建立加密套件組合的詳細資訊,請參閱 加密或解密套件或套件組合

套件組合命令特有的選項:

選項 說明
/Bv 指定套件組合的版本號碼。 版本號碼必須以下列格式的句號分隔四個部分: <主要>。<次要>。<組建>。<修訂>。
/f 指定對應檔。

請注意,如果未指定套件組合版本,或者如果套件組合設定為 “0.0.0.0”,則會使用目前的日期時間建立套件組合。

下列使用範例顯示套件組合命令的一些可能語法選項:

MakeAppx bundle [options] /d <content directory> /p <output bundle name>
MakeAppx bundle [options] /f <mapping file> /p <output bundle name>
MakeAppx bundle [options] /d <content directory> /ep <encrypted output bundle name> /kf MyKeyFile.txt
MakeAppx bundle [options] /f <mapping file> /ep <encrypted output bundle name> /kt

下列區塊包含套件組合命令的範例:

MakeAppx bundle /v /d "C:\My Files" /p MyBundle.msixbundle
MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /p MyBundle.msixbundle
MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /ep MyBundle.emsixbundle /kf MyKeyFile.txt
MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /ep MyBundle.emsixbundle /kt

從套件或套件組合擷取檔案

除了封裝和組合應用程式之外, MakeAppx.exe 也可以解除封裝或解除封裝現有的套件。 您必須提供內容目錄做為擷取檔案的目的地。 如果您嘗試從加密套件或套件組合擷取檔案,則可以使用 /ep 選項同時解密和擷取檔案,並指定是否應該使用密鑰檔案 (/kf) 或全域測試密鑰 (/kt) 進行解密。 如需解密套件或套件組合的詳細資訊,請參閱 加密或解密套件或套件組合

解除封裝解除封裝命令的特定選項:

選項 說明
/nd 解除封裝或解除封裝/套件組合時,不會執行解密。
/pfn 將所有檔案解壓縮至指定輸出路徑下的子目錄,並以套件組合或套件完整名稱命名

下列使用範例顯示解壓縮解除封裝命令的一些可能語法選項:

MakeAppx unpack [options] /p <input package name> /d <output directory>
MakeAppx unpack [options] /ep <encrypted input package name> /d <output directory> /kf <key file>
MakeAppx unpack [options] /ep <encrypted input package name> /d <output directory> /kt

MakeAppx unbundle [options] /p <input bundle name> /d <output directory>
MakeAppx unbundle [options] /ep <encrypted input bundle name> /d <output directory> /kf <key file>
MakeAppx unbundle [options] /ep <encrypted input bundle name> /d <output directory> /kt

下列區塊包含使用 unpackunbundle 命令的範例:

MakeAppx unpack /v /p MyPackage.msix /d "C:\My Files"
MakeAppx unpack /v /ep MyPackage.emsix /d "C:\My Files" /kf MyKeyFile.txt
MakeAppx unpack /v /ep MyPackage.emsix /d "C:\My Files" /kt

MakeAppx unbundle /v /p MyBundle.msixbundle /d "C:\My Files"
MakeAppx unbundle /v /ep MyBundle.emsixbundle /d "C:\My Files" /kf MyKeyFile.txt
MakeAppx unbundle /v /ep MyBundle.emsixbundle /d "C:\My Files" /kt

加密或解密套件或套件組合

MakeAppx.exe 工具也可以加密或解密現有的套件或套件組合。 您只需要提供套件名稱、輸出套件名稱,以及加密或解密是否應該使用密鑰檔案 (/kf) 或全域測試金鑰 (/kt)。

透過 Visual Studio 封裝精靈無法使用加密和解密。

加密解密指令的特定選項:

選項 說明
/Ep 指定加密的應用程式套件或套件組合。

下列使用範例顯示加密解密命令的一些可能語法選項:

MakeAppx encrypt [options] /p <package name> /ep <output package name> /kf <key file>
MakeAppx encrypt [options] /p <package name> /ep <output package name> /kt

MakeAppx decrypt [options] /ep <package name> /p <output package name> /kf <key file>
MakeAppx decrypt [options] /ep <package name> /p <output package name> /kt

下列區塊包含使用 加密解密 命令的範例:

MakeAppx.exe encrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kt
MakeAppx.exe encrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kf MyKeyFile.txt

MakeAppx.exe decrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kt
MakeAppx.exe decrypt p MyPackage.msix /ep MyEncryptedPackage.emsix /kf MyKeyFile.txt

金鑰檔案

密鑰檔案的開頭必須是包含字串 “[Keys]” 的行,後面接著描述用來加密每個套件之密鑰的行。 每個索引鍵會以引號括住一組字串,並以空格或製表符分隔。 第一個字串代表base64編碼的32位元組密鑰標識碼,第二個字串代表base64編碼的32位元組加密密鑰。 金鑰檔案應該是簡單的文字檔。

金鑰檔案的範例:

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

對應檔案

對應檔案的開頭必須是包含字串 “[Files]” 的行,後面接著描述要新增至封裝的檔案行。 每個檔案都會以引弧括住一組路徑,並以空格或製表符分隔。 每個檔案都代表其來源(磁碟上)和目的地(封裝中)。 對應檔應該是簡單的文本檔。

對應檔的範例(不含 /m 選項):

[Files]
"C:\MyApp\StartPage.html"               "default.html"
"C:\Program Files (x86)\example.txt"    "misc\example.txt"
"\\MyServer\path\icon.png"              "icon.png"
"my app files\readme.txt"               "my app files\readme.txt"
"CustomManifest.xml"                    "AppxManifest.xml"

使用對應檔案時,您可以選擇是否要使用 /m 選項。 /m 選項可讓使用者指定對應檔中的資源元數據,以包含在產生的指令清單中。 如果您使用 /m 選項,對應檔必須包含以 “[ResourceMetadata] 行開頭的區段,後面接著指定 ”ResourceDimensions“ 和 ”ResourceId“ 的行。應用程式套件可以包含多個 「ResourceDimensions」,但只能有一個 「ResourceId」。

對應檔的範例(使用 /m 選項):

[ResourceMetadata]
"ResourceDimensions"                    "language-en-us"
"ResourceId"                            "English"

[Files]
"images\en-us\logo.png"                 "en-us\logo.png"
"en-us.pri"                             "resources.pri"

MakeAppx.exe 所執行的語意驗證

MakeAppx.exe 會執行有限的 sematic 驗證,其設計目的是攔截最常見的部署錯誤,並協助確保應用程式套件有效。 如果您想要在使用 MakeAppx.exe略過驗證,請參閱 /nv 選項。

此驗證可確保:

  • 套件指令清單中參考的所有檔案都會包含在應用程式套件中。
  • 應用程式沒有兩個相同的索引鍵。
  • 應用程式不會註冊此清單中的禁止通訊協定:SMB、FILE、MS-WWA-WEB、MS-WWA。

這不是完整的語意驗證,因為它的設計只是為了攔截常見的錯誤。 MakeAppx.exe建置的套件不保證可安裝。