Compartir a través de


Crear un paquete o lote MSIX con MakeAppx.exe

MakeAppx.exe crea paquetes de aplicaciones (.msix o .appx) y lotes de paquetes de aplicaciones (.msixbundle o .appxbundle). MakeAppx.exe también extrae archivos de un paquete de aplicación o lote y cifra o descifra paquetes y lotes de aplicaciones. Esta herramienta se incluye en el SDK de Windows 10 y puede usarse 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, consulte Empaquetar una aplicación para UWP con Visual Studio y Empaquetar una aplicación de escritorio desde código fuente mediante Visual Studio.

Importante

Tenga en cuenta que MakeAppx.exe no crea un archivo de carga de paquete de aplicaciones (.appxupload o .msixupload), que es el tipo de paquete de aplicaciones válido recomendado para los envíos al Centro de socios. 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 acceso de instalación del SDK, aquí es donde está MakeAppx.exe en tu equipo Windows 10:

  • C:Archivos de programa (x86)\NWindows Kits\10\bin\<número de versió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 MakeAppx.exe:

MakeAppx <command> [options]      

La siguiente tabla describe los comandos de MakeAppx.exe.

Comando Descripción
pack Crea un paquete.
unpack Extrae todos los archivos del paquete especificado en el directorio de salida especificado.
Agrupación Crea un lote.
desagregados Desempaqueta todos los paquetes en un subdirectorio en la ruta de acceso de salida especificada denominada después del nombre completo del paquete o lote.
encrypt Crea un paquete o lote de aplicaciones encriptado a partir del paquete o lote de entrada en el paquete o agrupación de salida especificado.
decrypt Crea un paquete o agrupación de aplicaciones desencriptado a partir del paquete o agrupación de aplicaciones de entrada en el paquete o agrupación 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 que sea necesario deshabilitar todas las validaciones.
/kf Cifra o descifra el paquete o lote utilizando la clave del archivo de claves 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 preguntará 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 preguntará 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 texto de ayuda.

La lista siguiente contiene posibles argumentos:

Argument 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> El nombre del paquete encriptado. Este es el nombre de archivo anexado con .emsix o .eappx.
<nombre del lote de salida> El nombre del lote 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> El nombre del lote. Este es el nombre de archivo anexado con .msixbundle o .appxbundle.
<nombre de lote de entrada cifrado> Nombre del lote 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 del lote.
<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 lotes de salida.
<archivo de clave> Nombre del archivo que contiene una clave para el cifrado o descifrado.
<ID del algoritmo> Algoritmos usados al crear una asignación de bloques. Entre los algoritmos válidos se incluyen: SHA256 (valor predeterminado), SHA384, SHA512.

Crear un paquete de aplicación

Un paquete de aplicación es un conjunto completo de los 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 de recursos que se incluirán en el manifiesto generado.
/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 lote de aplicaciones es similar a un paquete de aplicación, pero un lote 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 el lote de aplicaciones al agruparlo. Para cifrar el lote 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 un lote cifrado, 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", el lote 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 lote

Además de empaquetar y agrupar aplicaciones, MakeAppx.exe también puede desempaquetar o desagrupar 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 desagrupar comandos:

Opción Descripción
/nd No realiza el descifrado al desempaquetar o desagrupar el paquete o lote.
/pfn Desempaqueta o desagrupa todos los archivos en un subdirectorio en la ruta de acceso de salida especificada, denominada después del nombre completo del paquete o del lote.

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

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

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 los comandos encrypt y decrypt:

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 encrypt y 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

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

Archivo de clave

Los archivos de clave deben comenzar con una línea que contenga la cadena "[Keys]" 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 clave:

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

Archivos de asignación

Los archivos de asignación deben comenzar con una línea que contenga la cadena "[Files]" seguida de líneas que describen los archivos que se van a agregar 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 asignación (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.