应用包生成工具 (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

使用应用打包程序

注意

在整个工具中都支持相对路径。

 

使用目录结构创建包

将AppxManifest.xml放在包含应用的所有有效负载文件的目录的根目录中。 为应用包创建相同的目录结构,并在部署时提取包时可用。

  1. 将所有文件放在单个目录结构中,根据需要创建子目录。

  2. 创建有效的包清单,AppxManifest.xml,并将其放置在根目录中。

  3. 运行以下命令:

    MakeAppx pack /dinput_directorypath/pfilepath.appx

使用映射文件创建包

  1. 创建有效的包清单,AppxManifest.xml。

  2. 创建映射文件。 第一行包含字符串 [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"
    
  3. 运行以下命令:

    MakeAppx pack /fmapping_filepath/pfilepath.appx

使用 SignTool 对包进行签名

  1. 创建证书。 清单中列出的发布者必须与签名证书的发布者使用者信息匹配。 有关创建签名证书的详细信息,请参阅 如何创建应用包签名证书

  2. 运行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 对应用包进行签名

从包中提取文件

  1. 运行以下命令:

    MakeAppx 解压缩 /pfile.appx/doutput_directory

  2. 解压缩包的结构与已安装的包相同。

使用目录结构创建包捆绑包

我们使用捆绑包命令通过添加内容<目录>中的所有包(包括子文件夹 () )在输出捆绑包名称>中创建应用捆绑<包。 如果 <内容目录> 包含捆绑清单,AppxBundleManifest.xml,则忽略它。

  1. 将所有包放在单个目录结构中,根据需要创建子目录。

  2. 运行以下命令:

    MakeAppx 捆绑包 /dinput_directorypath/pfilepath.appxbundle

使用映射文件创建包捆绑包

我们使用捆绑包命令在输出捆绑包名称>中创建<应用捆绑包,方法是从映射文件中>的包列表中添加所有包<。 如果 <映射文件> 包含捆绑清单,AppxBundleManifest.xml,则忽略它。

  1. 创建 <映射文件>。 第一行包含字符串 [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"
    
  2. 运行以下命令:

    MakeAppx 捆绑包 /fmapping_filepath/pfilepath.appxbundle

从捆绑包中提取包

  1. 运行以下命令:

    MakeAppx unbundle /pbundle_name.appxbundle /doutput_directory

  2. 未打包的捆绑包的结构与已安装的包捆绑包相同。

使用密钥文件加密包

  1. 创建密钥文件。 密钥文件必须以包含字符串“[Keys]”的行开头,后跟描述用于加密包的密钥的行。 每个键由引号中的字符串配对描述,用空格或制表符分隔。 第一个字符串表示密钥 ID,第二个字符串以十六进制形式表示加密密钥。

        [Keys]
        "0"                 "1AC4CDCFF1924D2885A0607269787BA6BF09B7FFEBF74ED4B9D86E423CF9186B"
    
  2. 运行以下命令:

    MakeAppx.exe加密 /ppackage_name.appx /epencrypted_package_name.eappx /kfkeyfile_name.txt

  3. 输入包将使用提供的密钥文件加密到指定的加密包中。

使用全局测试密钥加密包

  1. 运行以下命令:

    MakeAppx.exe加密 /ppackage_name.appx /epencrypted_package_name.eappx /kt

  2. 输入包将使用全局测试密钥加密到指定的加密包中。

使用密钥文件解密包

  1. 创建密钥文件。 密钥文件必须以包含字符串“[Keys]”的行开头,后跟描述用于加密包的密钥的行。 每个键由引号中的字符串配对描述,用空格或制表符分隔。 第一个字符串表示 base64 编码的 32 字节密钥 ID,第二个字符串表示 base64 编码的 32 字节加密密钥。

        [Keys]
        "OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="                 "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="
    
  2. 运行以下命令:

    MakeAppx.exe解密 /ppackage_name.appx /epunencrypted_package_name.eappx /kfkeyfile_name.txt

  3. 输入包将使用提供的密钥文件解密到指定的未加密包中。

使用全局测试密钥解密包

  1. 运行以下命令:

    MakeAppx.exe解密 /ppackage_name.appx /epunencrypted_package_name.eappx /kt

  2. 输入包将使用全局测试密钥解密到指定的未加密包中。

用法

始终需要使用 /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 packMakeAppx 解包MakeAppx 捆绑包MakeAppx 解包MakeAppx 加密MakeAppx 解密 是互斥命令。 下面是特定于每个命令的命令行参数:

MakeAppx pack [h]

创建程序包。

/halgorithm

指定创建块映射时使用的哈希算法。 下面是 算法的有效值:

SHA256(默认)
SHA384
SHA512

不能将此选项用于 解压缩 命令。

MakeAppx 解压缩 [pfn]

将指定程序包中的所有文件提取到指定的输出目录。 输出具有与包相同的目录结构。

/pfn

指定具有包全名的目录。 此目录在提供的输出位置下创建。 不能将此选项用于 pack 命令。

MakeAppx 解包 [pfn]

将所有包解压缩到指定输出路径下的子目录,以捆绑包全名命名。 输出具有与已安装的包捆绑包相同的目录结构。

/pfn

指定具有包捆绑包全名的目录。 此目录在提供的输出位置下创建。 不能将此选项用于 捆绑包 命令。

MakeAppx encrypt [kfkt]

从指定输出包处的指定输入应用包创建加密的应用包。

/kfkey<文件>

使用指定密钥文件中的密钥加密包或捆绑包。 不能将此选项用于 kt

/kt

使用全局测试密钥加密包或捆绑包。 不能将此选项用于 kf

MakeAppx 解密 [kfkt]

从指定输出包处的指定输入应用包创建未加密的应用包。

/kfkey<文件>

使用指定密钥文件中的密钥解密包或捆绑包。 不能将此选项用于 kt

/kt

使用全局测试密钥解密包或捆绑包。 不能将此选项用于 kf

MakeAppx 执行的语义验证

MakeAppx 执行有限的语义验证,旨在捕获最常见的部署错误,并帮助确保应用包有效。

此验证确保:

  • 在程序包清单中引用的所有文件都包含在应用包中。
  • 应用程序没有两个相同的密钥。
  • 应用程序不注册此列表中的禁止协议:SMB、FILE、MS-WWA-WEB、MS-WWA。

此语义验证未完成,且 MakeAppx 生成的包无法保证可安装。