App 封裝工具 (MakeAppx.exe)
注意
如需使用此工具的 UWP 指引,請參閱 使用 MakeAppx.exe 工具建立應用程式套件。
應用程式封裝器 (MakeAppx.exe) 會從磁碟上的檔案建立應用程式套件,或將檔案從應用程式套件擷取至磁碟。 從 Windows 8.1 開始,App packager 也會從磁碟上的應用程式套件建立應用程式套件套件組合,或從應用程式套件套件組合擷取應用程式套件組合到磁碟。 它包含在 Microsoft Visual Studio 和適用於 Windows 8 的 Windows 軟體開發工具包 (SDK) 或適用於 Windows 8.1 的 Windows 軟體開發工具包 (SDK) 和更新版本。 請流覽 適用於開發人員 的下載以取得它們。
MakeAppx.exe工具通常位於作業系統版本特定位置:
- C:\Program Files (x86)\Windows Kits\10\bin<組建編號><架構>\makeappx.exe
其中 <architecture> = x86、x64、arm、ar64 或 chpe。 或者,它可能位於:
C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe
- 使用目錄結構建立套件
- 若要使用對應檔案建立套件
- 使用 SignTool 簽署套件
- 從套件擷取檔案
- 使用目錄結構建立套件組合
- 使用對應檔案建立套件組合
- 從套件組合擷取套件
- 使用金鑰檔案加密套件
- 使用全域測試金鑰加密套件
- 使用金鑰檔案解密套件
- 使用全域測試金鑰解密套件
- 使用方式
使用應用程式封裝器
注意
整個工具都支持相對路徑。
使用目錄結構建立套件
將AppxManifest.xml放在目錄的根目錄中,其中包含您應用程式的所有承載檔案。 為應用程式套件建立相同的目錄結構,並在部署時擷取套件時可供使用。
將所有檔案放在單一目錄結構中,視需要建立子目錄。
建立有效的套件指令清單,AppxManifest.xml,並將它放在根目錄中。
執行此命令:
MakeAppx pack /d input_directorypath /p filepath.appx
若要使用對應檔案建立套件
建立有效的套件指令清單,AppxManifest.xml。
建立對應檔案。 第一行包含字串 [Files],後面指定引號字串中的來源 (disk) 和目的地 (package) 路徑。
[Files] "C:\MyApp\StartPage.htm" "default.html" "C:\MyApp\readme.txt" "doc\readme.txt" "\\MyServer\path\icon.png" "icon.png" "MyCustomManifest.xml" "AppxManifest.xml"
執行此命令:
MakeAppx pack /f mapping_filepath /p filepath.appx
使用 SignTool 簽署套件
建立憑證。 指令清單中列出的發行者必須符合簽署憑證的發行者主體資訊。 如需建立簽署憑證的詳細資訊,請參閱 如何建立應用程式套件簽署憑證。
執行SignTool.exe以簽署套件:
SignTool sign /a /v /fd hashAlgorithm /f certFileName filepath.appx
hashAlgorithm 必須與封裝應用程式時用來建立區塊對應的哈希演算法相符。 使用MakeAppx封裝公用程式時,預設的Appx區塊對應哈希演算法是 SHA256。 執行 SignTool.exe將 SHA256 指定為檔案摘要 (/fd) 演算法:
SignTool sign /a /v /fd SHA256 /f certFileName filepath.appx
如需如何簽署套件的詳細資訊,請參閱 如何使用SignTool 簽署應用程式套件。
從套件擷取檔案
執行此命令:
MakeAppx 將 /p 檔案解壓縮.appx /d output_directory
未封裝的套件的結構與已安裝的套件相同。
使用目錄結構建立套件組合
我們會使用套件組合命令,藉由從內容目錄>新增所有套件,以在<輸出套件組合名稱>建立<應用程式套件組合(包括子資料夾)。 如果 <內容目錄> 包含套件組合指令清單,AppxBundleManifest.xml,則會忽略它。
將所有套件放在單一目錄結構中,視需要建立子目錄。
執行此命令:
MakeAppx 套件組合 /d input_directorypath /p filepath.appxbundle
使用對應檔案建立套件組合
我們會使用套件組合命令,在輸出套件組合名稱>建立<應用程式套件組合,方法是從對應檔案>內的<套件清單新增所有套件。 如果 <對應檔案> 包含套件組合指令清單,AppxBundleManifest.xml,則會忽略它。
建立 <對應檔案>。 第一行包含字串 [Files],後面幾行會指定要新增至套件組合的套件。 每個套件都會以引弧括住一組路徑,並以空格或索引標籤分隔。 路徑組代表套件的來源(磁碟上)和目的地(在套件組合中)。 所有目的地套件名稱都必須具有.appx擴展名。
[Files] "C:\MyApp\MyApp_x86.appx" "MyApp_x86.appx" "C:\Program Files (x86)\ResPack.appx" "resources\resPack.appx" "\\MyServer\path\ResPack.appx" "Respack.appx" "my app files\respack.appx" "my app files\respack.appx"
執行此命令:
MakeAppx bundle /f mapping_filepath /p filepath.appxbundle
從套件組合擷取套件
執行此命令:
MakeAppx unbundle /p bundle_name.appxbundle /d output_directory
未封裝的套件組合的結構與已安裝的套件組合相同。
使用金鑰檔案加密套件
建立金鑰檔案。 密鑰檔案的開頭必須是包含字串 “[Keys]” 的行,後面接著描述用來加密封裝的密鑰行。 每個索引鍵會以引號括住一組字串,並以空格或製表符分隔。 第一個字串代表金鑰標識碼,而第二個字元串則以十六進位格式表示加密密鑰。
[Keys] "0" "1AC4CDCFF1924D2885A0607269787BA6BF09B7FFEBF74ED4B9D86E423CF9186B"
執行此命令:
MakeAppx.exe加密 /p package_name.appx /ep encrypted_package_name.eappx /kf keyfile_name.txt
輸入套件將會使用提供的金鑰檔案,加密至指定的加密套件。
使用全域測試金鑰加密套件
執行此命令:
MakeAppx.exe加密 /p package_name.appx /ep encrypted_package_name.eappx /kt
輸入套件將會使用全域測試金鑰加密至指定的加密套件。
使用金鑰檔案解密套件
建立金鑰檔案。 密鑰檔案的開頭必須是包含字串 “[Keys]” 的行,後面接著描述用來加密封裝的密鑰行。 每個索引鍵會以引號括住一組字串,並以空格或製表符分隔。 第一個字串代表base64編碼的32位元組密鑰標識碼,而第二個字串則代表base64編碼的32位元組加密密鑰。
[Keys] "OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU=" "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="
執行此命令:
MakeAppx.exe解密 /p package_name.appx /ep unencrypted_package_name.eappx /kf keyfile_name.txt
輸入套件將會使用提供的金鑰檔案解密至指定的未加密套件。
使用全域測試金鑰解密套件
執行此命令:
MakeAppx.exe解密 /p package_name.appx /ep unencrypted_package_name.eappx /kt
輸入套件將會使用全域測試密鑰解密至指定的未加密套件。
使用方式
使用 /d、/f 或 /ep 一律需要命令行自變數 /p。 請注意, /d、 /f 和 /ep 互斥。
MakeAppx pack [options] /p< 輸出套件名稱> /d <內容目錄>
MakeAppx pack [options] /p <輸出套件名稱> /f< 對應檔案>
MakeAppx 解除封裝 [options] /p< 輸入套件名稱> /d <輸出目錄>
MakeAppx 套件組合 [options] /p< 輸出套件組合名稱 >/d< 內容目錄>
MakeAppx 套件組合 [options] /p< 輸出套件組合名稱 >/f< 對應檔>
MakeAppx unbundle [options] /p< input bundle name> /d< output directory>
MakeAppx encrypt [options] /p< 輸入套件名稱> /ep <輸出套件名稱>
MakeAppx decrypt [options] /p <input package name /ep< output package name> >
命令行語法
以下是MakeAppx的命令行常見使用語法。
MakeAppx [pack|unpack|bundle|unbundle|encrypt|decrypt] [/h /kf /kt /l /o /no /nv /v /pfn /?]
MakeAppx 套件或解除封裝套件中的檔案、套件組合或解除封裝套件組合中的套件,或加密或解密指定輸入目錄或對應檔案中的應用程式套件或套件組合。 以下是適用於MakeAppx套件、MakeAppx解除封裝、MakeAppx 套件組合、MakeAppx unbundle、MakeAppx 加密或MakeAppx 解密的參數清單。
-
/l
-
此選項用於本地化的套件。 當地語系化套件的預設驗證行程。 此選項只會停用該特定驗證,而不需要停用所有驗證。
-
/o
-
如果輸出檔案存在,請覆寫輸出檔案。 如果您未指定此選項或 /no 選項,系統會詢問使用者是否要覆寫檔案。
您無法搭配 /no 使用此選項。
-
/不
-
如果輸出檔案存在,則防止覆寫輸出檔案。 如果您未指定此選項或 /o 選項,系統會詢問使用者是否要覆寫檔案。
您無法搭配 /o 使用此選項。
-
/內華達州
-
略過語意驗證。 如果您未指定此選項,此工具會執行封裝的完整驗證。
-
/v
-
啟用主控台的詳細記錄輸出。
-
/?
-
顯示說明文字。
MakeAppx 套件 、 MakeAppx 解除封裝 、 MakeAppx 套件組合、 MakeAppx unbundle、 MakeAppx 加密和 MakeAppx解密 都是互斥命令。 以下是特別套用至每個命令的命令列參數:
MakeAppx pack [h]
建立套件。
-
/h 演算法
-
指定建立區塊對應時要使用的哈希演算法。 以下是演算法的有效值:
- SHA256 (預設值)
- SHA384
- SHA512
您無法搭配 unpack 命令使用此選項。
MakeAppx 解除封裝 [pfn]
將指定封裝中的所有檔案解壓縮至指定的輸出目錄。 輸出的目錄結構與封裝相同。
-
/pfn
-
使用套件完整名稱指定名為 的目錄。 此目錄會在提供的輸出位置下建立。 您無法搭配 pack 命令使用此選項。
MakeAppx unbundle [pfn]
將所有套件解壓縮至指定輸出路徑下的子目錄,並以套件組合完整名稱命名。 輸出的目錄結構與已安裝的套件組合相同。
-
/pfn
-
使用套件組合完整名稱指定名為 的目錄。 此目錄會在提供的輸出位置下建立。 您無法搭配 套件組合 命令使用此選項。
MakeAppx encrypt [kf, kt]
在指定的輸出套件上,從指定的輸入應用程式套件建立加密的應用程式套件。
-
/kf <金鑰檔案>
-
使用指定金鑰檔案中的金鑰來加密套件或套件組合。 您無法搭配 kt 使用此選項。
-
/kt
-
使用全域測試金鑰加密套件或套件組合。 您無法搭配 kf 使用此選項。
MakeAppx 解密 [kf, kt]
在指定的輸出套件上,從指定的輸入應用程式套件建立未加密的應用程式套件。
-
/kf <金鑰檔案>
-
使用指定金鑰檔案中的金鑰解密套件或套件組合。 您無法搭配 kt 使用此選項。
-
/kt
-
使用全域測試金鑰解密套件或套件組合。 您無法搭配 kf 使用此選項。
MakeAppx 所執行的語意驗證
MakeAppx 會執行有限的語意驗證,其設計目的是攔截最常見的部署錯誤,並協助確保應用程式套件有效。
此驗證可確保:
- 套件指令清單中參考的所有檔案都會包含在應用程式套件中。
- 應用程式沒有兩個相同的索引鍵。
- 應用程式不會註冊此清單中的禁止通訊協定:SMB、FILE、MS-WWA-WEB、MS-WWA。
此語意驗證不完整,且 MakeAppx 所建置的套件不保證可安裝。