应用包生成工具 (MakeAppx.exe)
注意
有关使用此工具的 UWP 指南,请参阅 使用 MakeAppx.exe 工具创建应用包。
应用包程序 (MakeAppx.exe) 从磁盘上的文件创建应用包,或将文件从应用包提取到磁盘。 从Windows 8.1开始,应用包程序还会从磁盘上的应用包创建应用包捆绑包,或者从应用包捆绑包中提取应用包到磁盘。 它包含在Microsoft Visual Studio中,Windows软件开发工具包 (SDK) 用于Windows 8或Windows软件开发工具包 (SDK) ,用于Windows 8.1及更新。 访问 “下载”,供开发人员 获取。
MakeAppx.exe工具通常在特定于操作系统版本的位置中找到:
- C:\Program Files (x86) \Windows Kits\10\binbuild< numberarchitecture><>\makeappx.exe
其中 = x86、x64、arm、ar64 或 chpe。 或者,它可能位于:
C:\Program Files (x86) \Windows Kits\10\App Certification Kit\makeappx.exe
- 使用目录结构创建包
- 使用映射文件创建包
- 使用 SignTool 对包进行签名
- 从包中提取文件
- 使用目录结构创建包捆绑包
- 使用映射文件创建包捆绑包
- 从捆绑包中提取包
- 使用密钥文件加密包
- 使用全局测试密钥加密包
- 使用密钥文件解密包
- 使用全局测试密钥解密包
- 使用情况
使用应用打包程序
注意
在整个工具中都支持相对路径。
使用目录结构创建包
将AppxManifest.xml放在包含应用的所有有效负载文件的目录的根目录中。 为应用包创建相同的目录结构,并在部署时提取包时可用。
将所有文件放在单个目录结构中,根据需要创建子目录。
创建有效的包清单,AppxManifest.xml,并将其放置在根目录中。
运行以下命令:
MakeAppx pack /dinput_directorypath/pfilepath.appx
使用映射文件创建包
创建有效的包清单,AppxManifest.xml。
创建映射文件。 第一行包含字符串 [Files],后面的行指定引用字符串中的源 (磁盘) 和目标 (包) 路径。
[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 /fmapping_filepath/pfilepath.appx
使用 SignTool 对包进行签名
创建证书。 清单中列出的发布者必须与签名证书的发布者使用者信息匹配。 有关创建签名证书的详细信息,请参阅 如何创建应用包签名证书。
运行SignTool.exe对包进行签名:
SignTool sign /a /v /fdhashAlgorithm/fcertFileNamefilepath.appx
hashAlgorithm 必须与用于在打包应用时创建块映射的哈希算法匹配。 使用 MakeAppx 打包实用工具时,默认 Appx 块映射哈希算法为 SHA256。 运行SignTool.exe将 SHA256 指定为 /fd () 算法的文件摘要:
SignTool sign /a /v /fd SHA256 /fcertFileNamefilepath.appx
有关如何对包进行签名的详细信息,请参阅 如何使用 SignTool 对应用包进行签名。
从包中提取文件
运行以下命令:
MakeAppx 解压缩 /pfile.appx/doutput_directory
解压缩包的结构与已安装的包相同。
使用目录结构创建包捆绑包
我们使用捆绑包命令通过添加内容<目录>中的所有包(包括子文件夹 () )在输出捆绑包名称>中创建应用捆绑<包。 如果 <内容目录> 包含捆绑清单,AppxBundleManifest.xml,则忽略它。
将所有包放在单个目录结构中,根据需要创建子目录。
运行以下命令:
MakeAppx 捆绑包 /dinput_directorypath/pfilepath.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 捆绑包 /fmapping_filepath/pfilepath.appxbundle
从捆绑包中提取包
运行以下命令:
MakeAppx unbundle /pbundle_name.appxbundle /doutput_directory
未打包的捆绑包的结构与已安装的包捆绑包相同。
使用密钥文件加密包
创建密钥文件。 密钥文件必须以包含字符串“[Keys]”的行开头,后跟描述用于加密包的密钥的行。 每个键由引号中的字符串配对描述,用空格或制表符分隔。 第一个字符串表示密钥 ID,第二个字符串以十六进制形式表示加密密钥。
[Keys] "0" "1AC4CDCFF1924D2885A0607269787BA6BF09B7FFEBF74ED4B9D86E423CF9186B"
运行以下命令:
MakeAppx.exe加密 /ppackage_name.appx /epencrypted_package_name.eappx /kfkeyfile_name.txt
输入包将使用提供的密钥文件加密到指定的加密包中。
使用全局测试密钥加密包
运行以下命令:
MakeAppx.exe加密 /ppackage_name.appx /epencrypted_package_name.eappx /kt
输入包将使用全局测试密钥加密到指定的加密包中。
使用密钥文件解密包
创建密钥文件。 密钥文件必须以包含字符串“[Keys]”的行开头,后跟描述用于加密包的密钥的行。 每个键由引号中的字符串配对描述,用空格或制表符分隔。 第一个字符串表示 base64 编码的 32 字节密钥 ID,第二个字符串表示 base64 编码的 32 字节加密密钥。
[Keys] "OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU=" "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="
运行以下命令:
MakeAppx.exe解密 /ppackage_name.appx /epunencrypted_package_name.eappx /kfkeyfile_name.txt
输入包将使用提供的密钥文件解密到指定的未加密包中。
使用全局测试密钥解密包
运行以下命令:
MakeAppx.exe解密 /ppackage_name.appx /epunencrypted_package_name.eappx /kt
输入包将使用全局测试密钥解密到指定的未加密包中。
用法
始终需要使用 /d、/f 或 /ep 的命令行参数 /p。 请注意, /d、 /f 和 /ep 互斥。
MakeAppx pack [options]/poutput< package name>/dcontent< directory>
MakeAppx pack [options]/poutput< package name>/fmapping< 文件>
MakeAppx 解压缩 [options]/pinput< 包名称>/doutput< 目录>
MakeAppx 捆绑包 [options]/poutput< bundle name>/dcontent< 目录>
MakeAppx 捆绑包 [options]/poutput< bundle name>/fmapping< 文件>
MakeAppx unbundle [options]/pinput< bundle name>/doutput< directory>
MakeAppx encrypt [options]/pinput< 包名称>/epoutput< 包名称>
MakeAppx 解密 [options]/pinput< 包名称>/epoutput< 包名称>
命令行语法
下面是 MakeAppx 的命令行常见用法语法。
MakeAppx [pack|unpack|bundle|unbundle|encrypt|decrypt] [/h/kf/kt/l/o/no/nv/v/pfn/?]
MakeAppx 打包或解压缩包中的文件、捆绑包或取消捆绑捆绑包中的包,或者加密或解密指定输入目录或映射文件中的应用包或捆绑包。 下面是适用于 MakeAppx 包、MakeAppx 解包、MakeAppx 捆绑包、MakeAppx 取消包、MakeAppx 加密或MakeAppx 解密的参数列表。
-
/l
-
此选项用于本地化包。 本地化程序包上的默认验证过程。 此选项仅禁用该特定验证,而无需禁用所有验证。
-
/o
-
覆盖输出文件(如果存在)。 如果未指定此选项或 /no 选项,系统会询问用户是否要覆盖文件。
不能将此选项与 /no 一起使用。
-
/no
-
如果存在,会阻止输出文件的覆盖。 如果未指定此选项或 /o 选项,系统会询问用户是否要覆盖文件。
不能将此选项用于 /o。
-
/nv
-
跳过语义验证。 如果不指定此选项,该工具将执行程序包的完整验证。
-
/v
-
启用控制台的详细日志记录输出。
-
/?
-
显示帮助文本。
MakeAppx pack 、 MakeAppx 解包 、 MakeAppx 捆绑包、 MakeAppx 解包、 MakeAppx 加密和 MakeAppx 解密 是互斥命令。 下面是特定于每个命令的命令行参数:
MakeAppx pack [h]
创建程序包。
-
/halgorithm
-
指定创建块映射时使用的哈希算法。 下面是 算法的有效值:
- SHA256(默认)
- SHA384
- SHA512
不能将此选项用于 解压缩 命令。
MakeAppx 解压缩 [pfn]
将指定程序包中的所有文件提取到指定的输出目录。 输出具有与包相同的目录结构。
-
/pfn
-
指定具有包全名的目录。 此目录在提供的输出位置下创建。 不能将此选项用于 pack 命令。
MakeAppx 解包 [pfn]
将所有包解压缩到指定输出路径下的子目录,以捆绑包全名命名。 输出具有与已安装的包捆绑包相同的目录结构。
-
/pfn
-
指定具有包捆绑包全名的目录。 此目录在提供的输出位置下创建。 不能将此选项用于 捆绑包 命令。
MakeAppx encrypt [kf, kt]
从指定输出包处的指定输入应用包创建加密的应用包。
-
/kfkey<文件>
-
使用指定密钥文件中的密钥加密包或捆绑包。 不能将此选项用于 kt。
-
/kt
-
使用全局测试密钥加密包或捆绑包。 不能将此选项用于 kf。
MakeAppx 解密 [kf, kt]
从指定输出包处的指定输入应用包创建未加密的应用包。
-
/kfkey<文件>
-
使用指定密钥文件中的密钥解密包或捆绑包。 不能将此选项用于 kt。
-
/kt
-
使用全局测试密钥解密包或捆绑包。 不能将此选项用于 kf。
MakeAppx 执行的语义验证
MakeAppx 执行有限的语义验证,旨在捕获最常见的部署错误,并帮助确保应用包有效。
此验证确保:
- 在程序包清单中引用的所有文件都包含在应用包中。
- 应用程序没有两个相同的密钥。
- 应用程序不注册此列表中的禁止协议:SMB、FILE、MS-WWA-WEB、MS-WWA。
此语义验证未完成,且 MakeAppx 生成的包无法保证可安装。