MakeAppx.exe を使用して MSIX パッケージまたはバンドルを作成する

MakeAppx.exe では、アプリ パッケージ (.msix または .appx) とアプリ パッケージ バンドル (.msixbundle または .appxbundle) の両方が作成されます。 「MakeAppx.exe」はアプリ パッケージまたはバンドルからファイルも抽出し、アプリ パッケージとバンドルを暗号化または解読します。 このツールは、Windows 10 SDK に含まれており、コマンド プロンプトまたはスクリプト ファイルから使用できます。

MakeApp.exe を使用してデスクトップ アプリケーションをパッケージ化する方法については、デスクトップ アプリケーションの手動でのパッケージ化に関するページを参照してください。

重要

Visual Studio を使用してアプリを開発した場合、Visual Studio ウィザードを使用してアプリ パッケージを作成することを推奨します。 詳細については、Visual Studio を使用した UWP アプリのパッケージ化Visual Studio を使用したソース コードからのデスクトップ アプリケーションのパッケージ化に関するページを参照してください。

重要

アプリ パッケージ アップロード ファイル (.appxupload または .msixupload) は、パートナー センターへの送信で推奨されるタイプの有効なアプリ パッケージですが、MakeAppx.exe では、これらのアップロード ファイルが作成されません。 アプリ パッケージのアップロード ファイルは通常にVisual Studio のパッケージ化プロセスの過程で作成されますが、手動で作成することもできます。

MakeAppx.exe の使用

SDK のインストール パスに基づき、「MakeAppx.exe」が Windows 10 PC にある場所はこちらです。

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

<アーキテクチャ> = x86、x64、arm、arm64、chpe のいずれかの場合。 または、次の場所に配置されている場合があります。

  • C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe

MakeAppx.exe 構文とオプション

一般的な「MakeAppx.exe」構文は次の通りです。

MakeAppx <command> [options]      

次のテーブルでは、「MakeAppx.exe」のコマンドについて説明します。

コマンド 説明
pack パッケージを作成します。
unpack 指定したパッケージのすべてのファイルを指定した出力ディレクトリに抽出します。
bundle バンドルを作成します。
バンドル解除 指定された出力パスの下に、バンドルまたはパッケージの完全な名前に基づく名前のサブディレクトリを作成し、すべてのパッケージをそのディレクトリにアンパックします。
encrypt 指定された出力パッケージ/バンドルに入力パッケージ バンドルから暗号化されたアプリ パッケージまたはバンドルを作成します。
復号化 指定された出力パッケージ/バンドルに入力アプリ パッケージ /バンドルから解読されたアプリ パッケージまたはバンドルを作成します。

このオプションのリストはすべてのコマンドに適用されます。

オプション 説明
/d 入力、出力、コンテンツ ディレクトリを指定します。
/l ローカライズされたパッケージに使用されます。 ローカライズされたパッケージのデフォルト検証トリップ。 このオプションでは、すべての検証を無効にする必要がなく、その特定の検証のみが無効になります。
/kf 指定したキー ファイルのキーを使用し、パッケージまたはバンドルを暗号化または解読します。 これは /kt と一緒に使用できません。
/kt グローバル テスト キーを使用してパッケージまたはバンドルを暗号化または解読します。 これは /kf と一緒に使用できません。
/no 出力ファイルが存在する場合は上書きを防止します。 このオプションまたは /o オプションを指定しない場合、ユーザーに対してファイルを上書きするかどうかを確認するメッセージが表示されます。
/nv セマンティック検証をスキップします。 このオプションを指定しない場合、ツールはパッケージの完全な検証を実行します。
/o 出力ファイルが存在する場合、上書きされます。 このオプションまたは /no オプションを指定しない場合、ユーザーに対してファイルを上書きするかどうかを確認するメッセージが表示されます。
/p アプリ パッケージまたはバンドルを指定します。
/v コンソールへの詳細ログ出力を有効にします。
$ ヘルプ テキストを表示します。

次のリストには、可能な引数が含まれています。

Argument 説明
<出力パッケージ名> 作成されたパッケージの名前。 ファイル名の末尾に .msix または .appx が追加された名前です。
<暗号化された出力パッケージ名> 作成された暗号化パッケージの名前。 ファイル名の末尾に .emsix または .eappx が追加された名前です。
<入力パッケージ名> パッケージの名前です。 ファイル名の末尾に .msix または .appx が追加された名前です。
<暗号化された入力パッケージ名> 暗号化されたパッケージの名前。 ファイル名の末尾に .emsix または .eappx が追加された名前です。
<出力バンドル名> 作成されたバンドルの名前。 ファイル名の末尾に .msixbundle または .appxbundle が追加された名前です。
<暗号化された出力バンドル名> 作成された暗号化バンドルの名前。 ファイル名の末尾に .emsixbundle または .eappxbundle が追加された名前です。
<入力バンドル名> バンドルの名前。 ファイル名の末尾に .msixbundle または .appxbundle が追加された名前です。
<暗号化された入力バンドル名> 暗号化されたバンドルの名前。 ファイル名の末尾に .emsixbundle または .eappxbundle が追加された名前です。
<コンテンツ ディレクトリ> アプリ パッケージまたはバンドル コンテンツのパス。
<マッピング ファイル> パッケージ ソースとパス先を指定するファイル名。
<出力ディレクトリ> 出力パッケージとバンドルのディレクトリへのパス。
<キー ファイル> 暗号化または解読用のキーを含むファイルの名前。
<アルゴリズム ID> ブロック マップの作成時に使用されるアルゴリズム。 有効なアルゴリズムには、SHA256 (デフォルト)、SHA384、SHA512 が含まれます。

アプリケーション パッケージの作成

アプリ パッケージは、.msix または .appx パッケージ ファイルにパッケージ化されたアプリ ファイルの完全なセットです。 「パック」コマンドを使用してアプリ パッケージを作成するには、パッケージの場所にコンテンツ ディレクトリまたはマッピング ファイルのいずれかを指定する必要があります。 パッケージの作成時に暗号化することもできます。 パッケージを暗号化する場合は /ep を使用し、キー ファイル(/kf)またはグローバル テスト キー(/kt)のどちらを使用するかを指定する必要があります。 暗号化されたパッケージの作成の詳細については、「パッケージまたはバンドルの暗号化または解読」を参照してください。

パック」コマンド固有のオプションは次の通りです。

オプション 説明
/f マッピング ファイルを指定します。
/h ブロック マップの作成時に使用するハッシュ アルゴリズムを指定します。 これは「パック」コマンドにのみ使用できます。 有効なアルゴリズムには、SHA256 (デフォルト)、SHA384、SHA512 が含まれます。
/m 出力アプリ パッケージまたはリソース パッケージのマニフェストを生成する前提として使用される入力アプリ マニフェストへのパスを指定します。 このオプションを使用するとき、生成されるマニフェストにリソース ディメンションが含まれるように指定するため、/f も使用してマッピング ファイルに「[ResourceMetadata]」セクションを含める必要があります。
/nc パッケージ ファイルの圧縮を防止します。 デフォルトでは、ファイルは検出されたファイルの種類に基づいて圧縮されます。
/r リソース パッケージをビルドします。 これは /m と一緒に使用する必要があり、/l オプションの使用を意味します。

次の使用例では、「パック」コマンドで使用可能な構文オプションが一部示されています。

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

次の内容では、「パック」コマンドのコマンド ラインの例が示されています。

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

アプリ バンドルの作成

アプリ バンドルはアプリ パッケージに似ていますが、バンドルはユーザーがダウンロードするアプリのサイズを減少できます。 アプリ バンドルは、例として、言語固有のアセット、さまざまなイメージ スケール アセット、Microsoft DirectX の特定バージョンに適用されるリソースに役立ちます。 暗号化されたアプリ パッケージの作成と同様に、バンドル中にアプリ バンドルを暗号化することもできます。 アプリ バンドルを暗号化するには、/ep オプションを使用し、キー ファイル(/kf)またはグローバル テスト キー(/kt)のどちらを使用するかを指定します。 暗号化されたバンドルの作成の詳細については、「パッケージまたはバンドルの暗号化または解読」を参照してください。

バンドル」コマンド固有のオプションは次の通りです。

オプション 説明
/bv バンドルのバージョン番号を指定します。 バージョン番号はピリオドで区切られた 4 つの部分で構成されて次の形式である必要があります。<メジャー>.<マイナー>.<ビルド>.<修正>。
/f マッピング ファイルを指定します。

バンドル バージョンが指定されていないか、または "0.0.0.0" に設定されている場合、バンドルは現在の時刻を使用して作成されますので注意してください。

次の使用例では、「バンドル」コマンドで使用可能な構文オプションが一部示されています。

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

次のブロックには、「バンドル」コマンドの例が含まれています。

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

パッケージまたはバンドルからファイルの抽出

MakeAppx.exe」は、アプリのパッケージ化とバンドルに加えて、既存のパッケージをパック解除またはバンドル解除することもできます。 抽出されたファイルの展開先としてコンテンツ ディレクトリを指定する必要があります。 暗号化されたパッケージまたはバンドルからファイルを抽出する場合、/ep オプションを使用して同時にファイルを解読して抽出し、キー ファイル(/kf)またはグローバル テスト キー(/kt)を使用して解読するかどうかを指定できます。 パッケージまたはバンドルの解読の詳細については、「パッケージまたはバンドルの暗号化または解読」を参照してください。

パック解除」と「バンドル解除」コマンド固有のオプションは次の通りです。

オプション 説明
/nd パッケージ/バンドルをパック解除またはバンドル解除するときに解読を実行しません。
/pfn 指定した出力パスの下に、バンドルまたはパッケージの完全な名前に基づく名前のサブディレクトリが作成され、アンパックまたはアンバンドルしたすべてのファイルが保存されます。

次の使用例では、「パック解除」と「バンドル解除」コマンドで使用で使用可能な構文オプションが一部示されています。

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

次のブロックには、「パック解除」と「バンドル解除」コマンドを使用する例が含まれています。

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

パッケージまたはバンドルの暗号化または解読

MakeAppx.exe」ツールは、既存のパッケージまたはバンドルを暗号化または解読することもできます。 パッケージ名、出力パッケージ名、暗号化または解読のいずれかにキー ファイル(/kf)またはグローバル テスト キー(/kt)を使用するかのみを指定する必要があります。

暗号化と解読は、Visual Studio パッケージ化ウィザードで利用できません。

暗号化」と「解読」コマンド固有のオプションは次の通りです。

オプション 説明
/ep 暗号化されたアプリ パッケージまたはバンドルを指定します。

次の使用例では、「暗号化」と「解読」コマンドで使用可能な構文オプションが一部示されています。

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

次のブロックには、「暗号化」と「解読」コマンドを使用する例が含まれています。

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

キー ファイル

キー ファイルは文字列「[Keys]」を含む行で始まって、その後に各パッケージを暗号化するキーを記述する行を含む必要があります。 各キーは、スペースまたはタブで区切られた引用符で囲まれた文字列のペアで表されます。 最初の文字列は base64 でエンコードされた 32 バイトのキー ID を表し、2 番目の文字列は base64 でエンコードされた 32 バイトの暗号化キーを表します。 キー ファイルは単純なテキスト ファイルである必要があります。

キー ファイルの例は次の通りです。

[Keys]
"OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU="    "MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc="

マッピング ファイル

マッピング ファイルは、文字列「[Files]」を含む行で始まり、その後にパッケージに追加するファイルを記述する行を含む必要があります。 各ファイルは、スペースまたはタブで区切られた引用符で囲まれたパスのペアによって記述されます。 各ファイルは、それぞれのソース(ディスク上)とコピー先(パッケージ内)を表します。 マッピング ファイルは単純なテキスト ファイルである必要があります。

マッピング ファイルの例(/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"

マッピング ファイルを使用するとき、/m オプションを使用するかどうかを選択できます。 /m オプションを使用すると、ユーザーは生成されたマニフェストに含めるマッピング ファイル内のリソース メタデータを指定できます。 /m オプションを使う場合、マッピング ファイル内にそれに対応するセクションを設ける必要があります。このセクションは 1 行目に "[ResourceMetadata]" と指定し、それに続く行で "ResourceDimensions" と "ResourceId" を指定します。アプリ パッケージには複数の "ResourceDimensions" を含めることができますが、"ResourceId" は 1 つだけです。

マッピング ファイルの例(/m オプションを使用)は以下の通りです。

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

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

MakeAppx.exe によって実行されるセマンティック検証

MakeAppx.exe」は、最も一般的なデプロイ エラーをキャッチし、アプリ パッケージが有効であることを確認するために設計された限定的なセマティック検証を実行します。 「MakeAppx.exe」の使用中に検証をスキップする場合、/nv オプションを参照してください。

この検証により、次のことが保証されます。

  • パッケージ マニフェストで参照されるすべてのファイルは、アプリ パッケージに含まれます。
  • アプリケーションに同じキーが 2 つありません。
  • アプリケーションは、SMB、FILE、MS-WWA-WEB、MS-WWA の禁止プロトコルに登録しません。

これは一般的なエラーをキャッチするために設計されているため、完全なセマンティック検証ではありません。 「MakeAppx.exe」によってビルドされたパッケージは、インストール可能であることは保証されません。