Compartir a través de


Creación de un paquete o agrupación MSIX con MakeAppx.exe

MakeAppx.exe crea paquetes de aplicaciones (.msix o .appx) y paquetes de aplicaciones (.msixbundle o .appxbundle). MakeAppx.exe también extrae archivos de un paquete de aplicación o agrupación y cifra o descifra paquetes y agrupaciones de aplicaciones. Esta herramienta se incluye en el SDK de Windows 10 y se puede usar desde un símbolo del sistema o un archivo de script.

Para obtener información sobre cómo usar MakeApp.exe para empaquetar una aplicación de escritorio, consulte Empaquetar manualmente una aplicación de escritorio.

Importante

Si usó Visual Studio para desarrollar la aplicación, se recomienda usar el asistente de Visual Studio para crear el paquete de la aplicación. Para obtener más información, consulta Empaquetar una aplicación para UWP con Visual Studio y Empaquetar una aplicación de escritorio desde código fuente mediante Visual Studio.

Importante

Observe que MakeAppx.exe no crea un archivo de subida de paquetes de aplicaciones (.appxupload o .msixupload), que es el tipo recomendado de paquete de aplicación válido para envíos al Centro de Partners. El archivo de carga de paquetes de la aplicación se crea normalmente como parte del proceso de empaquetado de Visual Studio, aunque también se puede crear manualmente.

Uso de MakeAppx.exe

En función de la ruta de instalación del SDK, aquí es donde MakeAppx.exe está en el equipo Windows 10:

  • C:\Archivos de programa (x86)\Windows Kits\10\bin\<número de compilación>\<arquitectura>\makeappx.exe

donde <arquitectura> = x86, x64, arm, arm64 o chpe. Como alternativa, puede encontrarse en:

  • C:\Archivos de programa (x86)\Windows Kits\10\App Certification Kit\makeappx.exe

sintaxis y opciones de MakeAppx.exe

Sintaxis general deMakeAppx.exe :

MakeAppx <command> [options]      

En la tabla siguiente se describen los comandos de MakeAppx.exe.

Comando Descripción
paquete Crea un paquete.
desempaquetar Extrae todos los archivos del paquete especificado en el directorio de salida especificado.
agrupación Crea un paquete.
Desagrupar Desempaqueta todos los paquetes en un subdirectorio bajo la ruta de acceso de salida especificada con el nombre del lote o paquete completo.
cifrar Crea un paquete de aplicación cifrado o conjunto a partir del paquete o conjunto de entrada en el paquete o conjunto de salida especificado.
descifrar Crea un paquete de aplicación descifrado a partir del paquete de aplicación de entrada en el paquete de salida especificado.

Esta lista de opciones se aplica a todos los comandos:

Opción Descripción
/d Especifica el directorio de entrada, salida o contenido.
/l Se usa para paquetes localizados. Los recorridos de validación predeterminados en paquetes localizados. Esta opción deshabilita solo esa validación específica, sin necesidad de que se deshabilite toda la validación.
/kf Cifra o descifra el paquete o lote mediante la clave del archivo de clave especificado. No se puede usar con /kt.
/kt Cifra o descifra el paquete o lote mediante la clave de prueba global. No se puede usar con /kf.
/No Evita que se sobrescriba el archivo de salida si existe. Si no especifica esta opción o la opción /o, se le pregunta al usuario si desea sobrescribir el archivo.
/nv Omite la validación semántica. Si no especifica esta opción, la herramienta realiza una validación completa del paquete.
/o Sobrescribe el archivo de salida si existe. Si no especifica esta opción o la opción /no, se le pregunta al usuario si desea sobrescribir el archivo.
/p Especifica el paquete o lote de la aplicación.
/v Habilita la salida del registro detallado en la consola.
/? Muestra el texto de ayuda.

La lista siguiente contiene posibles argumentos:

Argumento Descripción
<nombre del paquete de salida> Nombre del paquete creado. Este es el nombre de archivo anexado con .msix o .appx.
<nombre del paquete de salida cifrado> Nombre del paquete cifrado creado. Este es el nombre de archivo anexado con .emsix o .eappx.
<nombre del paquete de entrada> Nombre del paquete. Este es el nombre de archivo anexado con .msix o .appx.
<nombre del paquete de entrada cifrado> Nombre del paquete cifrado. Este es el nombre de archivo anexado con .emsix o .eappx.
<nombre del lote de salida> Nombre del paquete creado. Este es el nombre de archivo anexado con .msixbundle o .appxbundle.
<nombre de lote de salida cifrado> Nombre del lote cifrado creado. Este es el nombre de archivo anexado con .emsixbundle o .eappxbundle.
<nombre del lote de entrada> Nombre del lote. Este es el nombre de archivo anexado con .msixbundle o .appxbundle.
<nombre de lote de entrada cifrado> Nombre del paquete cifrado. Este es el nombre de archivo anexado con .emsixbundle o .eappxbundle.
<directorio de contenido> Ruta de acceso para el paquete de la aplicación o el contenido de agrupación.
<archivo de asignación> Nombre de archivo que especifica el origen y el destino del paquete.
<directorio de salida> Ruta de acceso al directorio para paquetes y agrupaciones de salida.
<archivo clave> Nombre del archivo que contiene una clave para el cifrado o descifrado.
<id. de algoritmo> Algoritmos usados al crear un mapa de bloques. Entre los algoritmos válidos se incluyen: SHA256 (valor predeterminado), SHA384, SHA512.

Creación de un paquete de aplicación

Un paquete de aplicación es un conjunto completo de archivos de la aplicación empaquetados en un archivo de paquete .msix o .appx. Para crear un paquete de aplicación mediante el comando pack , debe proporcionar un directorio de contenido o un archivo de asignación para la ubicación del paquete. También puede cifrar un paquete al crearlo. Si desea cifrar el paquete, debe usar /ep y especificar si usa un archivo de clave (/kf) o la clave de prueba global (/kt). Para obtener más información sobre cómo crear un paquete cifrado, consulte Cifrar o descifrar un paquete o lote.

Opciones específicas del comando pack :

Opción Descripción
/f Especifica el archivo de asignación.
/h Especifica el algoritmo hash que se va a usar al crear la asignación de bloques. Esto solo se puede usar con el comando pack. Entre los algoritmos válidos se incluyen: SHA256 (valor predeterminado), SHA384, SHA512.
/m Especifica la ruta de acceso a un manifiesto de aplicación de entrada que se usará como base para generar el paquete de aplicación de salida o el manifiesto del paquete de recursos. Al usar esta opción, también debe usar /f e incluir una sección [ResourceMetadata] en el archivo de asignación para especificar las dimensiones del recurso que se incluirán en el manifiesto que se genere.
/Nc Impide la compresión de los archivos de paquete. De forma predeterminada, los archivos se comprimen en función del tipo de archivo detectado.
/r Compila un paquete de recursos. Debe usarse con /m e implica el uso de la opción /l.

En los ejemplos de uso siguientes se muestran algunas opciones de sintaxis posibles para el 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 continuación se muestran ejemplos de línea de comandos para el 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

Creación de un lote de aplicaciones

Una agrupación de aplicaciones es similar a un paquete de aplicación, pero una agrupación puede reducir el tamaño de la aplicación que descargan los usuarios. Los conjuntos de aplicaciones son útiles para recursos específicos del lenguaje, distintos recursos de escala de imágenes o recursos que se aplican a versiones específicas de Microsoft DirectX, por ejemplo. De forma similar a la creación de un paquete de aplicación cifrado, también puede cifrar la agrupación de aplicaciones al agruparlo. Para cifrar la agrupación de aplicaciones, use la opción /ep y especifique si usa un archivo de clave (/kf) o la clave de prueba global (/kt). Para obtener más información sobre cómo crear una agrupación cifrada, consulte Cifrar o descifrar un paquete o lote.

Opciones específicas del comando bundle :

Opción Descripción
/Bv Especifica el número de versión del lote. El número de versión debe estar en cuatro partes separadas por puntos en forma: <Principal>.<Menor>.<Compilación>.<Revisión>.
/f Especifica el archivo de asignación.

Tenga en cuenta que si no se especifica la versión del lote o si se establece en "0.0.0.0", la agrupación se crea con la fecha y hora actual.

En los ejemplos de uso siguientes se muestran algunas opciones de sintaxis posibles para el 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

El bloque siguiente contiene ejemplos para el 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

Extracción de archivos de un paquete o agrupación

Además de empaquetar y agrupar aplicaciones, MakeAppx.exe también puede desempaquetar o desempaquetar paquetes existentes. Debe proporcionar el directorio de contenido como destino para los archivos extraídos. Si intenta extraer archivos de un paquete o lote cifrados, puede descifrar y extraer los archivos al mismo tiempo mediante la opción /ep y especificar si se debe descifrar mediante un archivo de clave (/kf) o la clave de prueba global (/kt). Para obtener más información sobre el descifrado de un paquete o lote, consulte Cifrar o descifrar un paquete o lote.

Opciones específicas para desempaquetar y desempaquetar comandos:

Opción Descripción
/nd No realiza el descifrado al desempaquetar o desempaquetar el paquete o lote.
/pfn Desempaqueta todos los archivos en un subdirectorio dentro de la ruta de salida especificada, nombrado según el nombre completo del paquete o conjunto.

En los ejemplos de uso siguientes se muestran algunas opciones de sintaxis posibles para los comandos de desempaquetado y desempaquetado :

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

El bloque siguiente contiene ejemplos para usar los comandos de desempaquetado y desempaquetado :

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

Cifrado o descifrado de un paquete o lote

La herramienta MakeAppx.exe también puede cifrar o descifrar un paquete o lote existente. Simplemente debe proporcionar el nombre del paquete, el nombre del paquete de salida y si el cifrado o descifrado deben usar un archivo de clave (/kf) o la clave de prueba global (/kt).

El cifrado y el descifrado no están disponibles a través del Asistente para empaquetado de Visual Studio.

Opciones específicas para cifrar y descifrar comandos:

Opción Descripción
/ep Especifica un paquete o lote de aplicaciones cifrados.

En los ejemplos de uso siguientes se muestran algunas opciones de sintaxis posibles para los comandos de cifrado y descifrado :

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

El bloque siguiente contiene ejemplos para usar los comandos encrypt y 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

Archivos clave

Los archivos de clave deben comenzar con una línea que contenga la cadena "[Claves]" seguidas de líneas que describen las claves con las que cifrar cada paquete. Cada clave se representa mediante un par de cadenas entre comillas, separadas por espacios o tabulaciones. La primera cadena representa el identificador de clave de 32 bytes codificado en base64 y el segundo representa la clave de cifrado de 32 bytes codificada en base64. Un archivo de clave debe ser un archivo de texto simple.

Ejemplo de un archivo de clave:

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

Archivos de mapeo

Los archivos de asignación deben comenzar con una línea que contenga la cadena "[Files]", seguida de líneas que describan los archivos que se agregarán al paquete. Cada archivo se describe mediante un par de rutas de acceso entre comillas, separadas por espacios o pestañas. Cada archivo representa su origen (en disco) y destino (en el paquete). Un archivo de asignación debe ser un archivo de texto simple.

Ejemplo de un archivo de mapeo (sin la opción /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"

Al usar un archivo de asignación, puede elegir si desea usar la opción /m. La opción /m permite al usuario especificar los metadatos de recursos en el archivo de asignación que se incluirán en el manifiesto generado. Si usa la opción /m, el archivo de asignación debe contener una sección que comience por la línea "[ResourceMetadata]", seguidas de líneas que especifiquen "ResourceDimensions" y "ResourceId". Es posible que un paquete de aplicación contenga varios "ResourceDimensions", pero solo puede haber un "ResourceId".

Ejemplo de un archivo de asignación (con la opción /m):

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

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

Validación semántica realizada por MakeAppx.exe

MakeAppx.exe realiza una validación semática limitada diseñada para detectar los errores de implementación más comunes y ayudar a garantizar que el paquete de la aplicación sea válido. Consulte la opción /nv si desea omitir la validación mientras usa MakeAppx.exe.

Esta validación garantiza que:

  • Todos los archivos a los que se hace referencia en el manifiesto del paquete se incluyen en el paquete de la aplicación.
  • Una aplicación no tiene dos claves idénticas.
  • Una aplicación no se registra para un protocolo prohibido de esta lista: SMB, FILE, MS-WWA-WEB, MS-WWA.

Esta no es una validación semántica completa, ya que solo está diseñada para detectar errores comunes. No se garantiza que los paquetes creados por MakeAppx.exe sean instalables.