Создание пакета ИЛИ пакета MSIX с помощью MakeAppx.exe
MakeAppx.exe создает пакеты приложений (.msix или .appx) и пакеты пакетов приложений (.msixbundle или .appxbundle). MakeAppx.exe также извлекает файлы из пакета приложения или пакета приложений и шифрует или расшифровывает пакеты приложения и пакеты приложений. Это средство входит в состав пакета SDK Windows 10 и его можно использовать через командную строку или файл скрипта.
Сведения об использовании MakeApp.exe для упаковки классического приложения см. в статье Упаковка классического приложения вручную.
Важно!
Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания пакета приложения. Дополнительные сведения см. в разделах Упаковка приложения UWP с помощью Visual Studio и Упаковка классического приложения из исходного кода с помощью Visual Studio.
Важно!
Обратите внимание, что MakeAppx.exe не создает файл отправки пакета приложения (.appxupload или .msixupload), который является рекомендуемым типом допустимого пакета приложения для отправки в Центр партнеров. Файл отправки пакета приложения обычно создается в процессе упаковки Visual Studio, хотя его также можно создать вручную.
Использование MakeAppx.exe
В зависимости от пути установки пакета SDK MakeAppx.exe может находиться в следующих расположениях на компьютере с Windows 10:
- C:\Program Files (x86)\Windows Kits\10\bin\<build number>\<architecture>\makeappx.exe
where <architecture> = 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 | Создает пакет приложений. |
unbundle | Распаковка всех пакетов в подкаталог по указанному выходному пути с именем пакета или полного имени пакета. |
encrypt | Создает зашифрованный пакет приложения или пакет приложений из входного пакета приложения/пакета приложений по указанному выходному пакету приложения/пакету приложений. |
расшифровка | Создает расшифрованный пакет приложения или пакет приложений из входного пакета приложения/пакета приложений по указанному выходному пакету приложения/пакету приложений. |
Этот список параметров применим ко всем командам:
Параметр | Описание |
---|---|
/d | Указывает входные или выходные данные либо каталог содержимого. |
/l | Используется для локализованных пакетов. Пути проверки по умолчанию для локализованных пакетов. Этот параметр отключает только указанную проверку, не требуя отключения всех проверок. |
/kf | Шифрует или расшифровывает пакет приложения или пакет приложений с помощью ключа из указанного файла ключа. Не может использоваться с /kt. |
/kt | Шифрует или расшифровывает пакет приложения или пакет приложений с помощью глобального тестового ключа. Не может использоваться с /kf. |
/no | Предотвращает перезапись выходного файла, если он существует. Если не указать этот параметр или параметр /o, пользователь должен подтвердить перезапись файла. |
/nv | Пропускает семантическую проверку. Если не указать этот параметр, средство выполняет полную проверку пакета. |
/o | Перезаписывает выходной файл, если он существует. Если не указать этот параметр или параметр /no, пользователь должен подтвердить перезапись файла. |
/p | Указывает пакет приложения или пакет приложений. |
/v | Включает вывод подробных сведений в журнал на консоли. |
/? | Отображает текст справки. |
Следующий список содержит возможные аргументы:
Argument | Описание |
---|---|
<output package name> | Имя созданного пакета. Это имя файла, добавляемое с расширением MSIX или APPX. |
<encrypted output package name> | Имя созданного зашифрованного пакета. Это имя файла, добавляемое с расширением .emsix или .eappx. |
<input package name> | Имя пакета. Это имя файла, добавляемое с расширением MSIX или APPX. |
<encrypted input package name> | Имя зашифрованного пакета. Это имя файла, добавляемое с расширением .emsix или .eappx. |
<output bundle name> | Имя созданного пакета приложений. Это имя файла, добавляемое с расширением .msixbundle или .appxbundle. |
<encrypted output bundle name> | Имя созданного зашифрованного пакета приложений. Это имя файла, добавляемое с расширением .emsixbundle или .eappxbundle. |
<input bundle name> | Имя пакета приложений. Это имя файла, добавляемое с расширением .msixbundle или .appxbundle. |
<encrypted input bundle name> | Имя зашифрованного пакета приложений. Это имя файла, добавляемое с расширением .emsixbundle или .eappxbundle. |
<content directory> | Путь для содержимого пакета приложения или пакета приложений. |
<mapping file> | Имя файла, в котором указаны источник и назначение пакета. |
<output directory> | Путь к каталогу для выходных пакетов приложения и пакетов приложений. |
<key file> | Имя файла, содержащего ключ для шифрования или расшифровки. |
<algorithm ID> | Алгоритмы, используемые при создании сопоставления блоков. Допустимые алгоритмы: SHA256 (по умолчанию), SHA384, SHA512. |
Создание пакета приложения
Пакет приложения — это полный набор файлов приложения, упакованных в MSIX- или APPX-файл пакета. Чтобы создать пакет приложения с помощью команды pack, необходимо предоставить каталог содержимого или файл сопоставления для расположения пакета. Вы также можете зашифровать пакет во время создания. Если вам требуется зашифровать пакет, необходимо использовать параметр /ep и указать, используете ли вы файл ключа (/kf) или глобальный тестовый ключ (/kt). Подробнее о создании зашифрованного пакета см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к команде pack:
Параметр | Описание |
---|---|
/f | Указывает файл сопоставления. |
/h | Указывает хэш-алгоритм, используемый при создании сопоставления блоков. Этот параметр можно использовать только с командой pack. Допустимые алгоритмы: SHA256 (по умолчанию), SHA384, SHA512. |
/m | Указывает путь к входному манифесту приложения, на основе которого будет создан выходной пакет приложения или манифест пакета ресурсов. При использовании этого параметра необходимо также использовать параметр /f и включить раздел [ResourceMetadata] в файл сопоставления, чтобы указать размеры ресурсов, которые будут включены в созданный манифест. |
/nc | Предотвращает сжатие файлов пакета. По умолчанию файлы сжимаются в зависимости от выявленного типа файлов. |
/r | Собирает пакет ресурсов. Этот параметр необходимо использовать с параметром /m, а также он предполагает использование параметра /l. |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команды 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
Далее приведены примеры командной строки для команды 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
Создание пакета приложений
Пакет приложений похож на пакет приложения, но он может сократить размер приложения, скачиваемого пользователями. Пакеты приложения полезны, к примеру, для ресурсов, связанных с конкретным языком, различных ресурсов с определенным масштабом изображений или ресурсов, которые применяются к конкретным версиям Microsoft DirectX. По аналогии с созданием зашифрованного пакета приложения, вы также можете зашифровать пакет приложений при его сборке. Чтобы зашифровать пакет приложений, используйте параметр /ep и укажите, используете ли вы файл ключа (/kf) или глобальный тестовый ключ (/kt). Подробнее о создании зашифрованного пакета приложений см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к команде bundle:
Параметр | Описание |
---|---|
/bv | Указывает номер версии пакета. Номер версии должен состоять из четырех частей, разделенных точками, в следующей форме: <Основная версия>.<Вспомогательная версия>.<Сборка>.<Редакция>. |
/f | Указывает файл сопоставления. |
Обратите внимание, что если версия пакета не указана или указана в виде "0.0.0.0", пакет создается с использованием текущих даты и времени.
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команды 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
В следующем блоке содержатся примеры для команды 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
Извлечение файлов из пакета приложения или пакета приложений
Помимо упаковки приложений в пакеты приложения или пакеты приложений, MakeAppx.exe также может распаковывать существующие пакеты. Вам потребуется предоставить каталог содержимого в качестве назначения для извлеченных файлов. При попытке извлечь файлы из зашифрованного пакета приложения или пакета приложений вы можете расшифровать и извлечь файлы одновременно с помощью параметра /ep. При этом необходимо указать способ расшифровки: с помощью файла ключа (/kf) или глобального тестового ключа (/kt). Подробнее о расшифровке пакета приложения или пакета приложений см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к командам unpack и unbundle:
Параметр | Описание |
---|---|
/nd | Не выполняет расшифровку при распаковке пакета приложения или пакета приложений. |
/pfn | Распаковка или распаковка всех файлов в подкаталог по указанному выходному пути с именем пакета или полного имени пакета |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команд unpack и 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
В следующем блоке содержатся примеры использования команд unpack и 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
Шифрование и расшифровка пакета приложения или пакета приложений
Средство MakeAppx.exe также может зашифровать или расшифровать существующий пакет приложения или пакет приложений. Просто укажите имя пакета, имя выходного пакета, а также способ шифрования или расшифровки: с помощью файла ключа (/kf) или глобального тестового ключа (/kt).
Шифрование и расшифровку нельзя выполнить через мастер упаковки Visual Studio.
Параметры, относящиеся к командам encrypt и decrypt:
Параметр | Описание |
---|---|
/ep | Указывает зашифрованный пакет приложения или пакет приложений. |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команд encrypt и 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
Следующий блок содержит примеры использования команд encrypt и 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
Файлы ключей
Файлы ключей должны начинаться строкой, содержащей строку "[Keys]", за которой следуют строки с описанием ключей, используемых для шифрования каждого пакета. Каждый ключ представлен парой строк в кавычках, разделенных пробелами или табуляцией. Первая строка представляет собой идентификатор 32-байтового ключа в кодировке base64, а вторая — 32-байтовый ключ шифрования в кодировке base64. Файл ключа должен быть простым текстовым файлом.
Пример файла ключа:
[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, файл сопоставления должен содержать раздел, начинающийся со строки "[ResourceMetadata]", за которыми следуют строки с указанием "ResourceDimensions" и "ResourceId". Пакет приложения может содержать несколько "ResourceDimensions", но может быть только один "ResourceId".
Пример файла сопоставления (с параметром /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.
Эта проверка гарантирует следующее:
- все файлы, ссылки на которые присутствуют в манифесте пакета, входят в состав пакета приложения;
- в приложении нет двух идентичных ключей;
- приложение не регистрирует запрещенный протокол из этого списка: SMB, FILE, MS-WWA-WEB, MS-WWA.
Это не полноценная семантическая проверка, так как она позволяет выявлять только распространенные ошибки. Готовность к установке пакетов, созданных с помощью MakeAppx.exe, не гарантируется.