Creare un pacchetto MSIX o un bundle con MakeAppx.exe

MakeAppx.exe crea entrambi i pacchetti dell'app (con estensione msix o appx) e i bundle del pacchetto dell'app (.msixbundle o appxbundle). MakeAppx.exe estrae anche i file da un pacchetto o un bundle dell'app e crittografa o decrittografa pacchetti e bundle dell'app. Questo strumento è incluso in Windows 10 SDK e può essere usato da un prompt dei comandi o un file script.

Per informazioni su come usare MakeApp.exe per creare un pacchetto di un'app desktop, vedere Creare manualmente il pacchetto di un'app desktop.

Importante

Se è stato usato Visual Studio per sviluppare l'app, è consigliabile usare la procedura guidata di Visual Studio per creare il pacchetto dell'app. Per altre informazioni, vedere Creare un pacchetto di un'app UWP con Visual Studio e Creare un pacchetto di un'app desktop dal codice sorgente usando Visual Studio.

Importante

Si noti che MakeAppx.exe non crea un file di caricamento del pacchetto dell'app (con estensione appxupload o msixupload), che è il tipo consigliato di pacchetto dell'app valido per gli invii al Centro per i partner. Il file di caricamento del pacchetto dell'app viene in genere creato come parte del processo di creazione dei pacchetti di Visual Studio, anche se può essere creato manualmente.

Uso di MakeAppx.exe

In base al percorso di installazione dell'SDK, questo è il percorso in cui MakeAppx.exe si trova nel PC Windows 10:

  • C:\Programmi (x86)\Windows Kits\10\bin\<build number>\<architecture>\makeappx.exe

dove <architecture> = x86, x64, arm, arm64 o chpe. In alternativa, può trovarsi in:

  • C:\Programmi (x86)\Windows Kits\10\Kit di certificazione app\makeappx.exe

Sintassi e opzioni makeAppx.exe

Sintassi generale di MakeAppx.exe :

MakeAppx <command> [options]      

La tabella seguente descrive i comandi per MakeAppx.exe.

Comando Descrizione
pack Crea un pacchetto.
unpack Estrae tutti i file nel pacchetto specificato nella directory di output specificata.
servizi Crea un bundle.
Unbundle Decomprime tutti i pacchetti in una sottodirectory nel percorso di output specificato denominato dopo il bundle o il nome completo del pacchetto.
crittografare Crea un pacchetto o un bundle dell'app crittografato dal pacchetto/bundle di input nel pacchetto/bundle di output specificato.
decrypt Crea un pacchetto o un bundle dell'app decrittografato dal pacchetto/bundle dell'app di input nel pacchetto/bundle di output specificato.

Questo elenco di opzioni si applica a tutti i comandi:

Opzione Descrizione
/d Specifica la directory di input, output o contenuto.
/l Usato per i pacchetti localizzati. I viaggi di convalida predefiniti nei pacchetti localizzati. Questa opzione disabilita solo la convalida specifica, senza che sia necessario disabilitare tutta la convalida.
/Kf Crittografa o decrittografa il pacchetto o il bundle usando la chiave dal file di chiave specificato. Non può essere usato con /kt.
/Kt Crittografa o decrittografa il pacchetto o il bundle usando la chiave di test globale. Questo non può essere usato con /kf.
/No Impedisce la sovrascrittura del file di output, se presente. Se non si specifica questa opzione o l'opzione /o, all'utente viene chiesto se desidera sovrascrivere il file.
/Nv Ignora la convalida semantica. Se non si specifica questa opzione, lo strumento esegue una convalida completa del pacchetto.
/o Sovrascrive il file di output, se presente. Se non si specifica questa opzione o l'opzione /no, all'utente viene chiesto se desidera sovrascrivere il file.
/p Specifica il pacchetto o il bundle dell'app.
/v Abilita l'output di registrazione dettagliato nella console.
/? Visualizza il testo della Guida.

L'elenco seguente contiene gli argomenti possibili:

Argomento Descrizione
<nome del pacchetto di output> Nome del pacchetto creato. Si tratta del nome file aggiunto con estensione msix o appx.
<nome del pacchetto di output crittografato> Nome del pacchetto crittografato creato. Si tratta del nome file aggiunto con estensione emsix o .eappx.
<nome del pacchetto di input> Il nome del pacchetto. Si tratta del nome file aggiunto con estensione msix o appx.
<nome del pacchetto di input crittografato> Nome del pacchetto crittografato. Si tratta del nome file aggiunto con estensione emsix o .eappx.
<nome bundle di output> Nome del bundle creato. Questo è il nome del file aggiunto con estensione msixbundle o appxbundle.
<nome del bundle di output crittografato> Nome del bundle crittografato creato. Questo è il nome del file aggiunto con .emsixbundle o .eappxbundle.
<nome bundle di input> Nome del bundle. Questo è il nome del file aggiunto con estensione msixbundle o appxbundle.
<nome del bundle di input crittografato> Nome del bundle crittografato. Questo è il nome del file aggiunto con .emsixbundle o .eappxbundle.
<directory del contenuto> Percorso del pacchetto dell'app o del contenuto del bundle.
<file di mapping> Nome file che specifica l'origine e la destinazione del pacchetto.
<directory di output> Percorso della directory per pacchetti di output e bundle.
<file di chiave> Nome del file contenente una chiave per la crittografia o la decrittografia.
<ID algoritmo> Algoritmi usati durante la creazione di una mappa a blocchi. Gli algoritmi validi includono: SHA256 (impostazione predefinita), SHA384, SHA512.

Creare un pacchetto dell'applicazione

Un pacchetto dell'app è un set completo dei file dell'app inclusi in un file di pacchetto con estensione msix o appx. Per creare un pacchetto dell'app usando il comando pack , è necessario specificare una directory del contenuto o un file di mapping per il percorso del pacchetto. È anche possibile crittografare un pacchetto durante la creazione. Se si vuole crittografare il pacchetto, è necessario usare /ep e specificare se si usa un file di chiave (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla creazione di un pacchetto crittografato, vedere Crittografare o decrittografare un pacchetto o un bundle.

Opzioni specifiche del comando pack :

Opzione Descrizione
/f Specifica il file di mapping.
/h Specifica l'algoritmo hash da utilizzare durante la creazione della mappa a blocchi. Questa operazione può essere usata solo con il comando pack. Gli algoritmi validi includono: SHA256 (impostazione predefinita), SHA384, SHA512.
/m Specifica il percorso di un manifesto dell'app di input che verrà usato come base per generare il pacchetto dell'app di output o il manifesto del pacchetto di risorse. Quando si usa questa opzione, è necessario usare anche /f e includere una sezione [ResourceMetadata] nel file di mapping per specificare le dimensioni delle risorse da includere nel manifesto generato.
/Nc Impedisce la compressione dei file del pacchetto. Per impostazione predefinita, i file vengono compressi in base al tipo di file rilevato.
/r Compila un pacchetto di risorse. Deve essere usato con /m e implica l'uso dell'opzione /l.

Gli esempi di utilizzo seguenti mostrano alcune opzioni di sintassi possibili per il 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

Di seguito sono riportati esempi della riga di comando per il 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

Creare un bundle di app

Un bundle di app è simile a un pacchetto dell'app, ma un bundle può ridurre le dimensioni dell'app scaricata dagli utenti. Le aggregazioni di app sono utili per asset specifici della lingua, asset di scalabilità delle immagini variabili o risorse applicabili a versioni specifiche di Microsoft DirectX, ad esempio. Analogamente alla creazione di un pacchetto di app crittografato, è anche possibile crittografare il bundle dell'app durante la creazione di bundle. Per crittografare il bundle dell'app, usare l'opzione /ep e specificare se si usa un file di chiave (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla creazione di un bundle crittografato, vedere Crittografare o decrittografare un pacchetto o un bundle.

Opzioni specifiche del comando bundle :

Opzione Descrizione
/BV Specifica il numero di versione del bundle. Il numero di versione deve essere composto da quattro parti separate da punti nel formato <Principale>.<Minore>.<Compilazione>.<Revisione>.
/f Specifica il file di mapping.

Si noti che se la versione del bundle non è specificata o se è impostata su "0.0.0.0", il bundle viene creato usando la data e l'ora corrente.

Gli esempi di utilizzo seguenti mostrano alcune opzioni di sintassi possibili per il 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

Il blocco seguente contiene esempi per il 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

Estrarre file da un pacchetto o un bundle

Oltre alla creazione di pacchetti e alle app di creazione di bundle, MakeAppx.exe può anche decomprimere o separare i pacchetti esistenti. È necessario specificare la directory del contenuto come destinazione per i file estratti. Se si sta tentando di estrarre file da un pacchetto o un bundle crittografato, è possibile decrittografare ed estrarre i file contemporaneamente usando l'opzione /ep e specificando se deve essere decrittografato usando un file di chiave (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla decrittografia di un pacchetto o di un bundle, vedere Crittografare o decrittografare un pacchetto o un bundle.

Opzioni specifiche per decomprimere e separare i comandi:

Opzione Descrizione
/Nd Non esegue la decrittografia quando si decomprime o si separa il pacchetto o il bundle.
/Pfn Decomprime/separa tutti i file in una sottodirectory nel percorso di output specificato, denominato dopo il bundle o il nome completo del pacchetto

Gli esempi di utilizzo seguenti mostrano alcune possibili opzioni di sintassi per i comandi di decompressione e disaggregazione :

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

Il blocco seguente contiene esempi per l'uso dei comandi 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

Crittografare o decrittografare un pacchetto o un bundle

Lo strumento MakeAppx.exe può anche crittografare o decrittografare un pacchetto o un bundle esistente. È necessario specificare semplicemente il nome del pacchetto, il nome del pacchetto di output e se la crittografia o la decrittografia devono usare un file di chiave (/kf) o la chiave di test globale (/kt).

La crittografia e la decrittografia non sono disponibili tramite la creazione guidata pacchetti di Visual Studio.

Opzioni specifiche per crittografare e decrittografare i comandi:

Opzione Descrizione
/Ep Specifica un pacchetto o un bundle dell'app crittografato.

Gli esempi di utilizzo seguenti mostrano alcune possibili opzioni di sintassi per i comandi di crittografia e decrittografia :

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

Il blocco seguente contiene esempi per l'uso dei comandi di crittografia e decrittografia :

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

File chiave

I file di chiave devono iniziare con una riga contenente la stringa "[Keys]" seguita da righe che descrivono le chiavi con cui crittografare ogni pacchetto. Ogni chiave è rappresentata da una coppia di stringhe tra virgolette, separate da spazi o tabulazioni. La prima stringa rappresenta l'ID chiave a 32 byte con codifica Base64 e il secondo rappresenta la chiave di crittografia a 32 byte con codifica Base64. Un file di chiave deve essere un file di testo semplice.

Esempio di file di chiave:

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

File di mapping

I file di mapping devono iniziare con una riga contenente la stringa "[Files]" seguita da righe che descrivono i file da aggiungere al pacchetto. Ogni file è descritto da una coppia di percorsi tra virgolette, separati da spazi o schede. Ogni file rappresenta l'origine (su disco) e la destinazione (nel pacchetto). Un file di mapping deve essere un file di testo semplice.

Esempio di file di mapping (senza l'opzione /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"

Quando si usa un file di mapping, è possibile scegliere se si vuole usare l'opzione /m. L'opzione /m consente all'utente di specificare i metadati delle risorse nel file di mapping da includere nel manifesto generato. Se si usa l'opzione /m, il file di mapping deve contenere una sezione che inizia con la riga "[ResourceMetadata]", seguita da righe che specificano "ResourceDimensions" e "ResourceId". È possibile che un pacchetto dell'app contenga più "ResourceDimensions", ma può essere presente un solo "ResourceId".

Esempio di file di mapping (con l'opzione /m):

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

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

Convalida semantica eseguita da MakeAppx.exe

MakeAppx.exe esegue una convalida sematica limitata progettata per rilevare gli errori di distribuzione più comuni e garantire che il pacchetto dell'app sia valido. Per ignorare la convalida durante l'uso di MakeAppx.exe, vedere l'opzione /nv.

Questa convalida garantisce che:

  • Tutti i file a cui si fa riferimento nel manifesto del pacchetto sono inclusi nel pacchetto dell'app.
  • Un'applicazione non dispone di due chiavi identiche.
  • Un'applicazione non esegue la registrazione per un protocollo non consentito da questo elenco: SMB, FILE, MS-WWA-WEB, MS-WWA.

Non si tratta di una convalida semantica completa perché è progettata solo per rilevare gli errori comuni. Non è garantito che i pacchetti compilati da MakeAppx.exe siano installabili.