添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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 的安装路径,您 Windows 10 电脑上的 MakeAppx.exe 在这里:

  • C:\Program Files (x86)\Windows Kits\10\bin\<构建号>\<架构>\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的命令。

    创建应用包

    应用包是打包到 .msix 或.appx包文件中的应用文件的完整集。 若要使用 pack 命令创建应用包,必须为包的位置提供内容目录或映射文件。 还可以在创建包时对其进行加密。 如果要加密包,则必须使用 /ep 并指定使用的是密钥文件(/kf)或全局测试密钥(/kt)。 有关创建加密包的详细信息,请参阅 加密或解密包或捆绑包

    特定于 pack 命令的选项:

    指定输入应用清单的路径,该清单将用作生成输出应用包或资源包清单的基础。 使用此选项时,还必须使用 /f 并在映射文件中包括 [ResourceMetadata] 节,以指定要包含在生成的清单中的资源维度。 防止包文件被压缩。 默认情况下,文件会根据检测到的文件类型进行压缩。 生成资源包。 这必须与 /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)。 有关创建加密捆绑包的详细信息,请参阅 加密或解密包或捆绑包

    捆绑命令的特定选项:

    请注意,如果未指定捆绑包版本,或者如果捆绑包设置为“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)对其进行解密。 有关解密包或捆绑包的详细信息,请参阅 加密或解密包或捆绑包

    特定于 解压缩取消包命令 的选项:

    以下用法示例显示了 解压缩解包 命令的一些可能的语法选项:

    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
    

    以下块包含使用 解包解包 命令的示例:

    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 打包向导中,加密和解密功能不可用。

    特定于 加密解密 命令的选项:

    以下用法示例显示了 加密解密 命令的一些可能的语法选项:

    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 字节密钥 ID,第二个字符串表示 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 执行有限的信号验证,旨在捕获最常见的部署错误,并帮助确保应用包有效。 如果要在使用 MakeAppx.exe时跳过验证,请参阅 /nv 选项。

    此验证可用于确保:

  • 应用包中包含包清单中引用的所有文件。
  • 应用程序没有两个完全相同的密钥。
  • 应用程序不会从此列表中注册禁止的协议:SMB、FILE、MS-WWA-WEB、MS-WWA。
  • 这不是完整的语义验证,因为它仅用于捕获常见错误。 不保证 MakeAppx.exe 生成的包可安装。