Condividi tramite


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 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 da un file di script.

Per informazioni su come usare MakeApp.exe per creare un pacchetto di un'app desktop, vedi 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), ovvero 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, questa è la posizione in cui MakeAppx.exe si trova nel PC Windows 10:

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

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

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

MakeAppx.exe sintassi e opzioni

Sintassi MakeAppx.exe generale:

MakeAppx <command> [options]      

Nella tabella seguente vengono descritti i comandi per MakeAppx.exe.

comando Descrizione
pacchetto Crea un pacchetto.
disimballare Estrae tutti i file nel pacchetto specificato nella directory di output specificata.
pacchetto Crea un pacchetto.
scorporare Decomprime tutti i pacchetti in una sottodirectory nel percorso di output specificato con il nome del bundle o del nome completo del pacchetto.
crittografare Genera un pacchetto o un bundle crittografato dell'applicazione, a partire dal pacchetto/bundle di input fino al pacchetto/bundle di output specificato.
decriptare 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 di aiuto.

L'elenco seguente contiene gli argomenti possibili:

Argomento Descrizione
<nome del pacchetto di output> Nome del pacchetto creato. Si tratta del nome del file 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 ingresso> Nome del pacchetto. Si tratta del nome del file 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 di output del bundle> Il nome del pacchetto 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 del bundle di input> Nome del pacchetto. 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 dei contenuti> Percorso del pacchetto dell'app o del contenuto del bundle.
<file di mapping> Nome file che specifica l'origine e la destinazione del pacchetto.
<cartella 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 dell'algoritmo> Algoritmi usati durante la creazione di una mappa a blocchi. Gli algoritmi validi includono: SHA256 (impostazione predefinita), SHA384, SHA512.

Creare un pacchetto dell'app

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 verso un manifesto dell'app di input che verrà utilizzato come base per generare il manifesto del pacchetto dell'app di output o del pacchetto delle 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 Crea 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, è possibile anche crittografare il pacchetto dell'app durante la creazione. 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 alla creazione di bundle delle app, 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 di 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 (tab). 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. Consulta l'opzione /nv se si vuole ignorare la convalida quando si utilizza MakeAppx.exe.

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.