Cree un paquete MSIX o una agrupación con MakeAppx.exe

MakeAppx.exe paquetes de aplicación (.msix o .appx) y paquetes de paquetes de aplicación (.msixbundle o .appxbundle). MakeAppx.exe también extrae los archivos de un paquete de aplicaciones o un lote y cifra o descifra los paquetes de aplicaciones y lotes. 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 usarMakeApp.exeempaquetar una aplicación de escritorio, consulte Empaquetado manual de una aplicación de escritorio.

Importante

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

Importante

Tenga en MakeAppx.exe no crea un archivo de carga de paquetes de aplicación (.appxupload o .msixupload),que es el tipo recomendado de paquete de aplicación válido para envíos a Centro de partners. El archivo de carga del paquete de aplicación se crea normalmente como parte del proceso Visual Studio empaquetado,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:

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

No hay ninguna versión ARM de esta herramienta.

Opciones y sintaxis de MakeAppx.exe

Sintaxis general de 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.
bundle Crea un lote.
unbundle Desempaquete todos los paquetes en un subdirectorio en la ruta de acceso de salida especificada denominada después del nombre completo del paquete o del paquete.
encrypt Crea un paquete o un lote de aplicación cifrado desde el paquete o lote de entrada en el paquete o lote de salida especificado.
Descifrado Crea un paquete o un lote de aplicación descifrado desde el paquete o lote de aplicación de entrada en el paquete o lote 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 los paquetes localizados. La validación predeterminados se desactiva en paquetes localizados. Esta opción deshabilita solo esa validación específica, sin necesidad de deshabilitar toda la validación.
/kf Cifra o descifra el paquete o lote mediante la clave del archivo de clave especificado. No puede usarse junto con /kt.
/kt Cifra el o descifra el paquete o lote mediante la clave de prueba global. No puede usarse junto con /kf.
/no Se impide que se sobrescriba el archivo de salida, si lo hay. Si no se especifica esta opción o la opción /o, se pregunta al usuario si desea sobrescribir el archivo.
/nv Omite la validación semántica. Si no se especifica esta opción, la herramienta realiza una validación completa del paquete.
/o Sobrescribe el archivo de salida, si existe. Si no se especifica esta opción o la opción /no, se pregunta al usuario si desea sobrescribir el archivo.
/p Especifica el paquete de la aplicación o el lote.
/v Permite la salida del registro detallado en la consola.
/? Muestra el texto de ayuda.

La siguiente lista contiene posibles argumentos:

Argument Descripción
<output package name> El nombre del paquete creado. Este es el nombre de archivo anexado con .msix o .appx.
<encrypted output package name> El nombre del paquete cifrado creado. Este es el nombre de archivo anexado con .emsix o .eappx.
<input package name> Nombre del paquete. Este es el nombre de archivo anexado con .msix o .appx.
<encrypted input package name> El nombre del paquete cifrado. Este es el nombre de archivo anexado con .emsix o .eappx.
<output bundle name> El nombre del lote creado. Este es el nombre de archivo anexado con .msixbundle o .appxbundle.
<encrypted output bundle name> El nombre del lote cifrado creado. Este es el nombre de archivo anexado con .emsixbundle o .eappxbundle.
<input bundle name> El nombre del lote. Este es el nombre de archivo anexado con .msixbundle o .appxbundle.
<encrypted input bundle name> El nombre del lote cifrado. Este es el nombre de archivo anexado con .emsixbundle o .eappxbundle.
<directorio de contenido> La ruta de acceso del contenido de paquete de aplicación o el lote.
<mapping file> El nombre de archivo que especifica el origen del paquete y el destino.
<directorio de salida> La ruta de acceso al directorio de los paquetes y lotes de salida.
<archivo de clave> El nombre del archivo que contiene una clave para el cifrado o el descifrado.
<algorithm ID> Los algoritmos usados al crear una asignación de bloques. Los algoritmos válidos son: SHA256 (predeterminado), SHA384 y SHA512.

Crear 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, debes proporcionar un directorio de contenido o un archivo de asignación de la ubicación del paquete. También puedes cifrar un paquete mientras lo creas. Si deseas cifrar el paquete, debes usar /ep y especificar si estás usando 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, consulta 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 usar al crear la asignación de bloques. Solo puede usarse con el comando pack. Los algoritmos válidos son: SHA256 (predeterminado), SHA384 y SHA512.
/m Especifica la ruta de acceso a un manifiesto de aplicación de entrada que se usará como base para generar el manifiesto del paquete de salida de la aplicación o del paquete de recursos. Si usas esta opción, también debes emplear /f e incluir una sección [ResourceMetadata] en el archivo de asignación para especificar las dimensiones de los recursos que se incluirán en el manifiesto generado.
/nc Evita la compresión de los archivos del paquete. De manera predeterminada, los archivos se comprimen en función del tipo de archivo detectado.
/r Crea un paquete de recursos. Debe usarse junto con /m e implica el uso de la opción /l.

Los siguientes ejemplos de uso muestran algunas posibles opciones de sintaxis 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

El siguiente ejemplo muestra ejemplos de la 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

Crear un lote de aplicaciones

Un lote de aplicaciones es similar a un paquete de aplicaciones, pero un lote puede reducir el tamaño de la aplicación que se descargarán los usuarios. Los lotes de aplicaciones resultan ser útiles para recursos específicos por idioma, recursos de escala de imagen variables o recursos que se apliquen a versiones específicas de Microsoft DirectX, por ejemplo. De forma similar a crear un paquete de aplicación cifrado, también puedes cifrar el lote de aplicaciones mientras lo agrupas. Para cifrar el lote de aplicaciones, usa la opción /ep y especifica si vas a usar 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, consulta 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 con la forma: <Principal>.<Secundaria>.<Compilación>.<Revisión>.
/f Especifica el archivo de asignación.

Ten en cuenta que si no se especifica la versión del paquete, o si se establece en "0.0.0.0", el lote se crea con la fecha y la hora actuales.

Los siguientes ejemplos de uso muestran algunas posibles opciones de sintaxis 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 siguiente bloque 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

Extraer archivos de un paquete o lote

Además de empaquetar y crear lotes de aplicaciones, MakeAppx.exe también puede desempaquetar o sacar de lotes los paquetes existentes. Debes proporcionar el directorio de contenido como destino para los archivos extraídos. Si estás intentando extraer archivos de un paquete o lote cifrado, puedes descifrar y extraer los archivos al mismo tiempo mediante la opción /ep y especificar si debe deben descifrarse con un archivo de clave (/kf) o con la clave de prueba global (/kt). Para obtener más información acerca de cómo descifrar un paquete o lote, consulta Cifrar o descifrar un paquete o lote.

Opciones específicas de los comandos upack y unbundle:

Opción Descripción
/nd No realiza ningún descifrado al desempaquetar o separar el paquete o lote.
/pfn Desempaquete o desempaquete todos los archivos en un subdirectorio en la ruta de acceso de salida especificada, con el nombre de la agrupación o el nombre completo del paquete.

Los siguientes ejemplos de uso muestran algunas opciones de sintaxis posible 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 siguiente bloque contiene ejemplos de uso de 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

Cifrar y descifrar un paquete o lote

La herramienta MakeAppx.exe también puede cifrar o descifrar un paquete o un lote existentes. Simplemente debes proporcionar el nombre del paquete, el nombre del paquete de salida y si el cifrado o el 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 de empaquetado de Visual Studio.

Opciones específicas de los comandos encrypt y decrypt:

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

Los siguientes ejemplos de uso muestran algunas opciones de sintaxis posible 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 siguiente bloque contiene ejemplos de uso de 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 de clave

Los archivos de clave deben comenzar con una línea que contenga la cadena "[Keys]" seguida de líneas que describan las claves con las que cifrar cada paquete. Cada clave se representa mediante un par de cadenas entre comillas, separadas por espacios o tabuladores. La primera cadena representa el Id. de clave de 32 bits codificado en base64, y la segunda representa la clave de cifrado de 32 bits codificada en base64. Un archivo de clave debe ser un archivo de texto sencillo.

Ejemplo de un archivo de 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 describan los archivos que 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 el disco) y destino (en el paquete). Un archivo de asignaciones debe ser un archivo de texto sencillo.

Ejemplo de un archivo de asignaciones (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 asignaciones, puedes elegir si quieres usar la opción /m. La opción /m permite al usuario especificar los metadatos de recursos en el archivo de asignaciones 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 con la línea "[ResourceMetadata]", seguida de líneas que especifiquen "ResourceDimensions" y "ResourceId". Es posible que un paquete de aplicación contenga varias "ResourceDimensions", pero solo puede haber un "ResourceId".

Ejemplo de un archivo de asignaciones (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ántica limitada que se ha diseñado para capturar los errores de implementación más comunes y ayudar a garantizar que el paquete de la aplicación sea válido. Consulta la opción /nv si quieres omitir la validación mientras usas 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.

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 puedan instalarse.