使用 MakeAppx.exe 建立 MSIX 套件或套件組合
MakeAppx.exe 會建立應用程式套件 (.msix 或 .appx) 和應用程式套件套件套件組合 (.msixbundle 或 .appxbundle) 。 MakeAppx.exe 也會從應用程式套件或套件組合中擷取檔案,以及加密或解密應用程式套件與套件組合。 此工具包含在 Windows 10 SDK,而且可以從命令提示字元或指令碼檔案使用。
如需如何使用 MakeApp.exe 封裝傳統型應用程式的相關資訊,請參閱 手動封裝傳統型應用程式。
重要
如果您使用 Visual Studio 來開發 App,建議您使用 Visual Studio 精靈建立應用程式套件。 如需詳細資訊,請參閱使用 Visual Studio 從原始程式碼封裝具有Visual Studio和封裝傳統型應用程式的UWP 應用程式。
重要
請注意 ,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
其中 < 架構 > = 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 | 建立套件。 |
unpack | 將指定套件中的所有檔案解壓縮到指定的輸出目錄。 |
bundle | 建立套件組合。 |
unbundle | 將所有套件解壓縮到指定輸出路徑下的子目錄,名為 套件組合或套件完整名稱之後。 |
encrypt | 從輸入的套件/套件組合在指定的輸出套件/套件組合建立加密的應用程式套件或套件組合。 |
解密 | 從輸入的應用程式套件/套件組合在指定的輸出套件/套件組合建立解密的應用程式套件或套件組合。 |
這個選項清單適用於所有命令︰
選項 | 說明 |
---|---|
/d | 指定輸入、輸出或內容目錄。 |
/l | 供當地語系化的套件使用。 預設驗證是針對當地語系化的套件進行。 此選項只停用該特定的驗證,不需要停用所有的驗證。 |
/kf | 使用指定金鑰檔案的金鑰加密或解密套件或套件組合。 這不能搭配 /kt 使用。 |
/kt | 使用全域測試金鑰加密或解密套件或套件組合。 這不能搭配 /kf 使用。 |
/no | 如果有,可以避免覆寫輸出檔案。 如果您沒有指定此選項或 /o 選項,會詢問使用者是否要覆寫檔案。 |
/nv | 略過語意驗證。 如果您沒有指定此選項,工具會對套件執行完整驗證。 |
/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\] 區段以指定要在產生的資訊清單中包含的資源維度。 |
/nc | 防止壓縮套件檔案。 檔案預設會根據偵測到的檔案類型進行壓縮。 |
/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)。 如需有關建立加密套件組合的詳細資訊,請參閱加密或解密套件或套件組合。
bundle 命令專用的選項︰
選項 | 說明 |
---|---|
/bv | 指定套件組合的版本號碼。 版本號碼的格式必須是以句點隔開的四個部分︰<主要>.<次要>.<建置>.<修訂>。 |
/f | 指定對應檔案。 |
請注意,如果未指定套件組合版本,或如果設定為 "0.0.0.0",則套件組合會使用目前的日期時間建立。
下列使用方式範例顯示 bundle 命令一些可能的語法選項︰
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
下列區塊包含 bundle 命令的範例︰
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) 進行解密,同時解密並解壓縮檔案。 如需有關解密套件或套件組合的詳細資訊,請參閱加密或解密套件或套件組合。
unpack 和 unbundle 命令專用的選項︰
選項 | 說明 |
---|---|
/nd | 解除封裝或拆開套件/套件組合時不會執行解密。 |
/pfn | 將所有檔案解壓縮/解除封裝至指定輸出路徑下的子目錄,其名稱是以套件組合或套件完整名稱命名 |
下列使用方式範例顯示 unpack 和 unbundle 命令一些可能的語法選項︰
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
下列區塊包含使用 unpack 和 unbundle 命令的範例︰
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 封裝精靈無法使用加密和解密。
encrypt 和 decrypt 命令專用的選項︰
選項 | 說明 |
---|---|
/ep | 指定加密的應用程式套件或套件組合。 |
下列使用方式範例顯示 encrypt 和 decrypt 命令一些可能的語法選項︰
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
下列區塊包含使用 encrypt 和 decrypt 命令的範例︰
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]" 字串,後面接著要用來加密每個套件的金鑰。 每個金鑰由一組以引號括住的字串表示,以空格或 Tab 鍵分隔。 第一個字串代表 base64 編碼的 32 位元金鑰識別碼,第二個字串代表 base64 編碼的 32 位元加密金鑰。 金鑰檔案必須是簡單的文字檔案。
金鑰檔案的範例:
[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU=" "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="
對應檔案
對應檔案的開頭必須有一行 "[Files]" 字串,後面接著要加入套件的檔案。 每個檔案由一組以引號括住的路徑表示,以空格或 Tab 鍵分隔。 每個檔案代表其來源 (磁碟上) 與目的地 (套件中)。 對應檔案必須是簡單的文字檔案。
對應檔案 (不含 /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 會執行有限的語意式驗證,這種驗證專門設計來攔截最常見的部署錯誤,並協助確保應用程式套件是有效的。 如果您在使用 MakeAppx.exe 時想要略過驗證,請參閱 /nv 選項。
此驗證可確保︰
- 在套件資訊清單中參考的所有檔案都包含在應用程式套件中。
- 應用程式不會有兩個相同的金鑰。
- 應用程式不會針對此清單中禁止的通訊協定進行註冊︰SMB、FILE、MS-WWA-WEB、MS-WWA。
這不是完整的語意式驗證,只是設計來攔截常見的錯誤。 透過 MakeAppx.exe 建置的套件不保證能夠安裝。