Creare un pacchetto MSIX o un bundle con MakeAppx.exe

MakeAppx.exe crea sia pacchetti dell'app (con estensione msix o appx) che bundle di pacchetti dell'app (con estensione 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 le MakeApp.execreare un pacchetto di un'app desktop, vedere Creare un pacchetto di un'app desktop manualmente.

Importante

Se è stata usata Visual Studio per sviluppare l'app, è consigliabile usare la procedura guidata Visual Studio per creare il pacchetto dell'app. Per altre informazioni, vedi 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 cheMakeAppx.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 a Partner Center. Il file di caricamento del pacchetto dell'app viene in genere creato come parte del processo Visual Studio creazione di pacchetti,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:

  • x86: C:\Programmi (x86)\Windows Kits\10\bin \ < numero di > build\x86\makeappx.exe
  • x64: C:\Programmi (x86)\Windows Kits\10\bin \ < numero di build >\x64\makeappx.exe

Non c'è un versione ARM di questo strumento.

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 in base al nome completo del pacchetto o del bundle.
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. Si tratta del nome file aggiunto con msix o appx.
<encrypted output package name> Nome del pacchetto crittografato creato. Si tratta del nome file aggiunto con .emsix o .eappx.
<input package name> Nome del pacchetto. Si tratta del nome file aggiunto con msix o appx.
<encrypted input package name> Nome del pacchetto crittografato. Si tratta del nome file aggiunto con .emsix o .eappx.
<output bundle name> Nome del bundle creato. Si tratta del nome file aggiunto con msixbundle o appxbundle.
<encrypted output bundle name> Nome del bundle crittografato creato. Si tratta del nome file aggiunto con .emsixbundle o .eappxbundle.
<input bundle name> Nome del bundle. Si tratta del nome file aggiunto con msixbundle o appxbundle.
<encrypted input bundle name> Nome del bundle crittografato. Si tratta del nome 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 di 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 di file dell'app in pacchetto in un file 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/annulla il decompressione di tutti i file in una sottodirectory nel percorso di output specificato, denominata in base al 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 usi 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ù elementi "ResourceDimensions", ma può esserci un solo elemento "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.