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 bundle o un pacchetto dell'app e crittografa o decrittografa bundle e pacchetti di 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 un pacchetto manuale di un'app desktop.

Importante

Se hai usato Visual Studio per sviluppare l'app, è consigliabile usare la procedura guidata 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), ovvero il tipo consigliato di pacchetto di 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 di pacchetti Visual Studio, anche se può essere creato manualmente.

Uso di MakeAppx.exe

Ecco dove si trova lo strumento MakeAppx.exe nel computer Windows 10 in base al percorso di installazione dell'SDK:

  • 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\Certificazione app Kit\makeappx.exe

Sintassi e opzioni di 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 dal pacchetto specificato nella directory di output indicata.
bundle Crea un bundle.
unbundle Decomprime tutti i pacchetti in una sottodirectory nel percorso di output specificato denominato dopo il nome completo del bundle o del pacchetto.
encrypt Crea un bundle o un pacchetto dell'app crittografato dal bundle/pacchetto di input nel bundle/pacchetto di output specificato.
decrypt Crea un bundle o un pacchetto dell'app decrittografato dal bundle/pacchetto dell'app di input nel bundle/pacchetto di output specificato.

Questo elenco di opzioni si applica a tutti i comandi:

Opzione Descrizione
/d Specifica la directory di contenuto, di input o di output.
/l Usata per i pacchetti localizzati. La convalida predefinita può comportare problemi se applicata ai pacchetti localizzati. Questa opzione disabilita solo tale convalida specifica, senza richiedere la disabilitazione di altri tipi di convalida.
/kf Crittografa o decrittografa il pacchetto o il bundle usando la chiave del file delle chiavi specificato. Non può essere usata con /kt.
/kt Crittografa o decrittografa il pacchetto o il bundle usando la chiave di test globale. Non può essere usata con /kf.
/no Impedisce la sovrascrittura del file di output, se presente. Se non specifichi questa opzione oppure l'opzione /o, viene chiesto all'utente se vuole sovrascrivere il file.
/nv Ignora la convalida semantica. Se non specifichi questa opzione, lo strumento esegue una convalida completa del pacchetto.
/o Sovrascrive il file di output, se presente. Se non specifichi questa opzione oppure l'opzione /no, viene chiesto all'utente se vuole sovrascrivere il file.
/ p Specifica il bundle o il pacchetto dell'app.
/v Consente di scaricare l'output della registrazione dettagliata nella console.
/? Visualizza il testo della Guida.

L'elenco seguente include gli argomenti possibili:

Argument Descrizione
<output package name> Nome del pacchetto creato. Questo è il nome del file aggiunto con .msix o .appx.
<encrypted output package name> Nome del pacchetto crittografato creato. Questo è il nome del file aggiunto con .emsix o .eappx.
<input package name> Nome del pacchetto. Questo è il nome del file aggiunto con .msix o .appx.
<encrypted input package name> Nome del pacchetto crittografato. Questo è il nome del file aggiunto con .emsix o .eappx.
<output bundle name> Nome del bundle creato. Questo è il nome del file aggiunto con .msixbundle o .appxbundle.
<encrypted output bundle name> Nome del bundle crittografato creato. Questo è il nome del file aggiunto con .emsixbundle o .eappxbundle.
<input bundle name> Nome del bundle. Questo è il nome del file aggiunto con .msixbundle o .appxbundle.
<encrypted input bundle name> Nome del bundle crittografato. Questo è il nome del file aggiunto con .emsixbundle o .eappxbundle.
<directory del contenuto> Percorso del contenuto del bundle o del pacchetto dell'app.
<mapping file> Nome file che specifica l'origine e la destinazione del pacchetto.
<directory di output> Percorso della directory per i bundle e i pacchetti di output.
<file chiave> Nome del file contenente una chiave per la crittografia e la decrittografia.
<algorithm ID> Algoritmi usati durante la creazione di una mappa dei blocchi. Gli algoritmi validi includono: SHA256 (predefinito), 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, devi fornire una directory di contenuto o un file di mapping per la posizione del pacchetto. Durante la creazione di un pacchetto, puoi anche crittografarlo. Se vuoi crittografare il pacchetto, devi usare /ep e specificare se stai usando un file delle chiavi (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla creazione di un pacchetto crittografato, vedi Crittografare o decrittografare un bundle o un pacchetto.

Opzioni specifiche del comando pack:

Opzione Descrizione
/f Specifica il file di mapping.
/h Specifica l'algoritmo hash da usare per la creazione della mappa dei blocchi. Può essere usata solo con il comando pack. Gli algoritmi validi includono: SHA256 (predefinito), SHA384, SHA512.
/m Specifica il percorso di un manifesto dell'app di input che verrà usato come base per generare il manifesto del pacchetto di risorse o il pacchetto dell'app di output. Quando usi questa opzione, devi anche usare /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 di pacchetto. Per impostazione predefinita, i file vengono compressi in base al tipo di file rilevato.
/r Crea un pacchetto di risorse. Questa opzione deve essere usata 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 disponibili 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 dell'app

Un bundle dell'app è simile a un pacchetto dell'app, ma consente di ridurre le dimensioni dell'app scaricata dagli utenti. I bundle dell'app sono utili se hai definito, ad esempio, asset specifici della lingua, diversi asset a livello di immagine o risorse che si applicano a versioni specifiche di Microsoft DirectX. Analogamente alla creazione di un pacchetto dell'app crittografato, puoi crittografare anche il bundle dell'app durante la sua creazione. Per crittografare il bundle dell'app, devi usare l'opzione /ep e specificare se stai usando un file delle chiavi (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla creazione di un bundle crittografato, vedi Crittografare o decrittografare un bundle o un pacchetto.

Opzioni specifiche del comando bundle:

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

Tieni presente che se la versione del bundle non è specificata o è impostata su "0.0.0.0", il bundle viene creato usando data e ora correnti.

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 bundle o un pacchetto

Oltre a creare pacchetti e bundle di app, MakeAppx.exe è anche in grado di decomprimere o estrarre pacchetti esistenti. Devi fornire la directory di contenuto come destinazione per i file estratti. Se stai cercando di estrarre i file da un bundle o un pacchetto crittografato, puoi decrittografare ed estrarre i file contemporaneamente usando l'opzione /ep e specificando se devono essere decrittografati usando un file delle chiavi (/kf) o la chiave di test globale (/kt). Per altre informazioni sulla decrittografia di un bundle o un pacchetto, vedi Crittografare o decrittografare un bundle o un pacchetto.

Opzioni specifiche dei comandi unpack e unbundle:

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

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

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 bundle o un pacchetto

Lo strumento MakeAppx.exe può anche crittografare o decrittografare un bundle o un pacchetto esistente. Devi solamente specificare il nome del pacchetto, il nome del pacchetto di output e se eseguire la crittografia o la decrittografia usando un file delle chiavi (/kf) o la chiave di test globale (/kt).

Crittografia e decrittografia non sono disponibili tramite la procedura guidata di creazione di pacchetti di Visual Studio.

Opzioni specifiche dei comandi encrypt e decrypt:

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

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

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

File delle chiavi

I file delle chiavi 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 di chiave a 32 byte con codifica base64 e la seconda rappresenta la chiave di crittografia a 32 byte con codifica base64. Un file delle chiavi deve essere un file di testo semplice.

Esempio di file delle chiavi:

[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 tabulazioni. Ogni file indica l'origine (sul 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 usi un file di mapping, puoi scegliere se 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ò esistere solo un "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 la convalida semantica limitata, progettata per intercettare gli errori di distribuzione più comuni e garantire che il pacchetto dell'app sia valido. Se vuoi ignorare la convalida quando usi MakeAppx.exe, vedi l'opzione /nv.

La convalida assicura che:

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

Non si tratta di una convalida semantica completa, ma solo di una convalida pensata per intercettare gli errori comuni. Non è garantito che i pacchetti creati da MakeAppx.exe siano installabili.