Criar um pacote ou pacote MSIX com MakeAppx.exe

MakeAppx.exe cria pacotes de aplicativos (.msix ou.appx) e pacotes de pacotes de aplicativos (.msixbundle ou.appxbundle). MakeAppx.exe também extrai arquivos de um pacote ou pacote de aplicativos e criptografa ou descriptografa pacotes e pacotes de aplicativos. Essa ferramenta está incluída no SDK do Windows 10 e pode ser usada em um prompt de comando ou um arquivo de script.

Para obter informações sobre como usar MakeApp.exe para empacotar um aplicativo de área de trabalho, consulte Empacotar um aplicativo de área de trabalho manualmente.

Importante

Se você usou o Visual Studio para desenvolver seu aplicativo, é recomendável usar o assistente do Visual Studio para criar seu pacote de aplicativo. Para obter mais informações, consulte Empacotar um aplicativo UWP com o Visual Studio e Empacotar um aplicativo da área de trabalho do código-fonte usando o Visual Studio.

Importante

Observe que MakeAppx.exe não cria um arquivo de carregamento de pacote de aplicativo (.appxupload ou .msixupload), que é o tipo recomendado de pacote do aplicativo válido para envios ao Partner Center. O arquivo de carregamento de pacote do aplicativo normalmente é criado como parte do processo de empacotamento do Visual Studio, embora também possa ser criado manualmente.

Usar MakeAppx.exe

Com base no caminho da instalação do SDK, é aqui que o MakeAppx.exe fica localizado no computador com Windows 10:

  • C:\Program Files (x86)\Windows Kits\10\bin\<número do build>\<architecture\makeappx.exe>

em que <architecture> = x86, x64, arm, arm64 ou chpe. Como alternativa, pode estar localizado em:

  • C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe

Sintaxe e opções de MakeAppx.exe

Sintaxe geral de MakeAppx.exe:

MakeAppx <command> [options]      

A tabela a seguir descreve os comandos de MakeAppx.exe.

Comando Descrição
pack Cria um pacote.
unpack Extrai todos os arquivos do pacote especificado para o diretório de saída especificado.
bundle Cria um pacote.
desagrupar Descompacta todos os pacotes em um subdiretório no caminho de saída especificado nomeado após o pacote ou nome completo do pacote.
criptografar Cria um pacote ou pacote do aplicativo criptografado do pacote/pacote de entrada no pacote/pacote de saída especificado.
decrypt Cria um pacote ou pacote do aplicativo configurável descriptografado do pacote/pacote do aplicativo de entrada no pacote/pacote de saída especificado.

Esta lista de opções se aplica a todos os comandos:

Opção Descrição
/d Especifica o diretório de entrada, saída ou conteúdo.
/l Usado para pacotes localizados. A validação padrão é disparada em pacotes localizados. Essa opção desabilita apenas a validação específica, sem exigir que todas as validações sejam desabilitadas.
/kf Criptografa ou descriptografa o pacote ou agrupamento usando a chave do arquivo de chave especificado. Isso não pode ser usado com /kt.
/kt Criptografa ou descriptografa o pacote ou agrupamento configurável usando a chave de teste global. Isso não pode ser usado com /kf.
/não Impede a substituição do arquivo de saída, se ele existir. Se você não especificar essa opção ou a opção /o, o usuário será indagado se deseja substituir o arquivo.
/nv Ignora a validação semântica. Se você não especificar essa opção, a ferramenta realizará uma validação completa do pacote.
/o Substituirá o arquivo de saída, se existir. Se você não especificar essa opção ou a opção /no, o usuário será indagado se deseja substituir o arquivo.
/p Especifica o pacote ou o pacote do aplicativo configurável.
/v Habilita a saída de log detalhado para o console.
/? Exibe o texto da ajuda.

A seguinte lista contém argumentos possíveis:

Argument Descrição
<nome do pacote de saída> O nome do pacote criado. Este é o nome do arquivo acrescentado com .msix ou .appx.
<nome do pacote de saída criptografado> O nome do pacote criptografado criado. Este é o nome do arquivo acrescentado com .emsix ou .eappx.
<nome do pacote de entrada> O nome do pacote. Este é o nome do arquivo acrescentado com .msix ou .appx.
<nome do pacote de entrada criptografado> O nome do pacote criptografado. Este é o nome do arquivo acrescentado com .emsix ou .eappx.
<nome do pacote de saída> O nome do pacote criado. Este é o nome do arquivo acrescentado com .msixbundle ou .appxbundle.
<nome do pacote de saída criptografado> O nome do pacote criptografado criado. Este é o nome do arquivo acrescentado com .emsixbundle ou .eappxbundle.
<nome do pacote de entrada> O nome do pacote. Este é o nome do arquivo acrescentado com .msixbundle ou .appxbundle.
<nome do pacote de entrada criptografado> O nome do pacote criptografado. Este é o nome do arquivo acrescentado com .emsixbundle ou .eappxbundle.
<diretório de conteúdo> Caminho do pacote do aplicativo ou do conteúdo do pacote.
<arquivo de mapeamento> Nome de arquivo que especifica a origem e o destino do pacote.
<diretório de saída> Caminho do diretório para pacotes e pacotes configuráveis de saída.
<arquivo de chave> Nome do arquivo que contém uma chave para criptografia ou descriptografia.
<algoritmo ID> Algoritmos usados ao criar um mapa de blocos. Os algoritmos válidos incluem: SHA256 (padrão), SHA384, SHA512.

Criar um pacote de aplicativo

Um pacote do aplicativo é um conjunto completo de arquivos do aplicativo empacotados em um arquivo de pacote .msix ou .appx. Para criar um pacote do aplicativo usando o comando pack, você deve fornecer um diretório de conteúdo ou um arquivo de mapeamento para o local do pacote. Você também pode criptografar um pacote ao criá-lo. Se desejar criptografar o pacote, você deverá usar /ep e especificar se está usando um arquivo de chave (/kf) ou a chave de teste global (/kt). Para obter mais informações sobre como criar um pacote criptografado, consulte Criptografar ou descriptografar um pacote ou agrupamento.

Opções específicas para o comando pack:

Opção Descrição
/f Especifica o arquivo de mapeamento.
/h Especifica o algoritmo de hash a ser usado ao criar o mapa de blocos. Isso só pode ser usado com o comando pack. Os algoritmos válidos incluem: SHA256 (padrão), SHA384, SHA512.
/m Especifica o caminho para um manifesto de aplicativo de entrada que será usado como base para gerar o pacote do aplicativo de saída ou o manifesto do pacote de recursos. Ao usar essa opção, você também deve usar /f e incluir uma seção [ResourceMetadata] no arquivo de mapeamento para especificar as dimensões de recursos a serem incluídas no manifesto gerado.
/nc Impede a compactação dos arquivos do pacote. Por padrão, os arquivos são compactados com base no tipo de arquivo detectado.
/r Cria um pacote de recursos. Isso deve ser usado com /m e implica o uso da opção /l.

Os seguintes exemplos de uso mostram algumas opções de sintaxe possíveis para o comando 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

A seguir são mostrados exemplos de linha de comando para o comando 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

Criar um lote de aplicativo

Um lote de aplicativo é semelhante a um pacote do aplicativo, mas um lote pode reduzir o tamanho do aplicativo que os usuários baixam. Lotes de aplicativos são úteis para ativos específicos a um idioma, ativos de escala de imagem variável ou recursos que se aplicam a versões específicas do Microsoft DirectX, por exemplo. Semelhante à criação de um pacote do aplicativo criptografado, você também pode criptografar o lote de aplicativo ao agrupá-lo. Para criptografar o lote de aplicativo, use a opção /ep e especifique se você está usando um arquivo de chave (/kf) ou a chave de teste global (/kt). Para obter mais informações sobre como criar um lote criptografado, consulte Criptografar ou descriptografar um lote ou agrupamento.

Opções específicas para o comando bundle:

Opção Descrição
/bv Especifica o número da versão do pacote. O número da versão deve estar em quatro partes separadas por pontos no formato: <Principal>.<Secundária>.<Compilação>.<Revisão>.
/f Especifica o arquivo de mapeamento.

Observe que, se a versão do pacote não for especificada ou se estiver definida como "0.0.0.0", o pacote será criado usando a data/hora atuais.

Os seguintes exemplos de uso mostram algumas opções de sintaxe possíveis para o comando 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

O seguinte bloco contém exemplos para o comando 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

Extrair arquivos de um pacote ou agrupamento

Além de empacotar e agrupar aplicativos, MakeAppx.exe também pode descompactar ou desempacotar pacotes existentes. Você deve fornecer o diretório de conteúdo como destino para os arquivos extraídos. Se estiver tentando extrair arquivos de um pacote ou pacote criptografado, você poderá descriptografar e extrair os arquivos ao mesmo tempo usando a opção /ep e especificando se devem ser descriptografados usando um arquivo de chave (/kf) ou a chave de teste global (/kt). Para obter mais informações sobre como descriptografar um pacote ou agrupamento configurável, consulte Criptografar ou descriptografar um lote ou agrupamento.

Opções específicas para os comandos unpack e unbundle:

Opção Descrição
/nd Não executa a descriptografia ao descompactar ou desagregar o pacote/agrupamento.
/pfn Descompacta/desagrega todos os arquivos em um subdiretório no caminho de saída especificado, nomeado após o agrupamento ou nome completo do pacote

Os seguintes exemplos de uso mostram algumas opções de sintaxe possíveis para os comandos unpack e 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

O seguinte bloco contém exemplos para usar os comandos unpack e 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

Criptografar ou descriptografar um pacote ou agrupamento

A ferramenta MakeAppx.exe também pode criptografar ou descriptografar um pacote ou agrupamento existente. Você deve simplesmente fornecer o nome do pacote e o nome do pacote de saída e indicar se a criptografia ou a descriptografia deve usar um arquivo de chave (/kf) ou a chave de teste global (/kt).

A criptografia e a descriptografia não estão disponíveis por meio do assistente de empacotamento do Visual Studio.

Opções específicas para os comandos encrypt e decrypt:

Opção Descrição
/ep Especifica um agrupamento ou pacote de aplicativo criptografado.

Os seguintes exemplos de uso mostram algumas opções de sintaxe possíveis para os comandos encrypt e 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

O seguinte bloco contém exemplos de uso dos comandos encrypt e 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

Arquivos de chaves

Os arquivos de chave devem começar com uma linha que contenha a cadeia de caracteres "[Keys]" seguida por linhas que descrevam as chaves para criptografar cada pacote. Cada chave é representada por um par de cadeias de caracteres entre aspas, separadas por espaços ou tabulações. A primeira cadeia de caracteres representa a ID de chave de 32 bytes codificado em base64 e a segunda representa a chave de criptografia de 32 bytes codificada em base64. Um arquivo de chave deve ser um arquivo de texto simples.

Exemplo de um arquivo de chaves:

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

Arquivos de mapeamento

Os arquivos de mapeamento devem começar com uma linha que contenha a cadeia de caracteres "[Files]" seguida por linhas que descrevam os arquivos a serem adicionados ao pacote. Cada arquivo é descrito por um par de caminhos entre aspas, separados por espaços ou tabulações. Cada arquivo representa sua origem (no disco) e destino (no pacote). Um arquivo de mapeamento deve ser um arquivo de texto simples.

Exemplo de um arquivo de mapeamento (sem a opção /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"

Ao usar um arquivo de mapeamento, você pode escolher se deseja usar a opção /m. A opção /m permite que o usuário especifique os metadados do recurso no arquivo de mapeamento a ser incluído no manifesto gerado. Se você usar a opção /m, o arquivo de mapeamento deverá conter uma seção que comece com a linha "[ResourceMetadata]", seguida por linhas que especifiquem "ResourceDimensions" e "ResourceId". É possível que um pacote de aplicativo contenha várias "ResourceDimensions", mas só pode haver uma "ResourceId".

Exemplo de um arquivo de mapeamento (com a opção /m):

[ResourceMetadata]
"ResourceDimensions"                    "language-en-us"
"ResourceId"                            "English"

[Files]
"images\en-us\logo.png"                 "en-us\logo.png"
"en-us.pri"                             "resources.pri"

Validação semântica realizada por MakeAppx.exe

MakeAppx.exe executa validação semantica limitada projetada para detectar os erros de implantação mais comuns e garantir que o pacote do aplicativo seja válido. Consulte a opção /nv se quiser ignorar a validação ao usar MakeAppx.exe.

Essa validação garante que:

  • Todos os arquivos referenciados no manifesto do pacote sejam incluídos no pacote do aplicativo.
  • Um aplicativo não tenha duas chaves idênticas.
  • Um aplicativo não se registre em um protocolo proibido desta lista: SMB, FILE, MS-WWA-WEB, MS-WWA.

Essa não é uma validação semântica completa, pois foi projetada apenas para detectar erros comuns. Não há garantia de que os pacotes criados por MakeAppx.exe MakeAppx.exe sejam instaláveis.