MakeAppx.exe를 사용하여 MSIX 패키지 또는 번들 만들기

MakeAppx.exe 는 앱 패키지(.msix 또는 .appx) 및 앱 패키지 번들(.msixbundle 또는 .appxbundle)을 모두 만듭니다. 또한 MakeAppx.exe 는 앱 패키지 또는 번들에서 파일을 추출하고 앱 패키지 및 번들을 암호화하거나 암호 해독합니다. 이 도구는 Windows 10 SDK에 포함되어 있으며 명령 프롬프트 또는 스크립트 파일에서 사용할 수 있습니다.

MakeApp.exe를 사용하여 데스크톱 앱을 패키지하는 방법에 대한 자세한 내용은 데스크톱 앱 패키지를 수동으로 참조하세요.

Important

Visual Studio를 사용하여 앱을 개발한 경우 Visual Studio 마법사를 사용하여 앱 패키지를 만드는 것이 좋습니다. 자세한 내용은 Visual Studio를 사용하여 UWP 앱 패키지 및 Visual Studio를 사용하여 소스 코드에서 데스크톱 앱 패키지 지정을 참조하세요.

Important

MakeAppx.exe는 파트너 센터에 제출하는 데 권장되는 유효한 앱 패키지 유형인 앱 패키지 업로드 파일(.appxupload 또는 .msixupload)을 만들지 않습니다. 앱 패키지 업로드 파일은 일반적으로 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에 대한 명령을 설명합니다.

Command 설명
pack 패키지를 만듭니다.
unpack 지정된 패키지의 모든 파일을 지정된 출력 디렉터리로 추출합니다.
번들이 번들을 만듭니다.
unbundle 모든 패키지를 번들 또는 패키지 전체 이름의 이름을 따서 명명된 지정된 출력 경로 아래의 하위 디렉터리로 압축을 풉니다.
암호화 지정된 출력 패키지/번들의 입력 패키지/번들에서 암호화된 앱 패키지 또는 번들을 만듭니다.
decrypt 지정된 출력 패키지/번들의 입력 앱 패키지/번들에서 암호 해독된 앱 패키지 또는 번들을 만듭니다.

이 옵션 목록은 모든 명령에 적용됩니다.

옵션 설명
/d 입력, 출력 또는 콘텐츠 디렉터리를 지정합니다.
/l 지역화된 패키지에 사용됩니다. 지역화된 패키지의 기본 유효성 검사 여정입니다. 이 옵션은 모든 유효성 검사를 사용하지 않도록 설정하지 않고 특정 유효성 검사만 사용하지 않도록 설정합니다.
/Kf 지정된 키 파일의 키를 사용하여 패키지 또는 번들을 암호화하거나 암호 해독합니다. /kt에서는 사용할 수 없습니다.
/Kt 전역 테스트 키를 사용하여 패키지 또는 번들을 암호화하거나 암호 해독합니다. /kf와 함께 사용할 수 없습니다.
/아니요 출력 파일이 있는 경우 덮어쓰기를 방지합니다. 이 옵션 또는 /o 옵션을 지정하지 않으면 사용자에게 파일을 덮어쓸지 묻는 메시지가 표시됩니다.
/네바다 의미 체계 유효성 검사를 건너뜁니다. 이 옵션을 지정하지 않으면 도구에서 패키지의 전체 유효성 검사를 수행합니다.
/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 패키지 파일에 패키지된 앱 파일의 전체 집합입니다. 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)를 사용하는지 여부를 지정합니다. 암호화된 번들을 만드는 방법에 대한 자세한 내용은 패키지 또는 번들 암호화 또는 암호 해독을 참조 하세요.

번들 명령과 관련된 옵션:

옵션 설명
/bv 번들의 버전 번호를 지정합니다. 버전 번호는 마침표 <(주>)로 구분된 네 부분으로 구성되어야 합니다.<부 버전입니다>.<빌드>합니다.<수정 버전>입니다.
/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 모든 파일을 번들 또는 패키지 전체 이름의 이름을 따서 명명된 지정된 출력 경로 아래의 하위 디렉터리로 압축 풀기/번들 해제

다음 사용 예제에서는 unpackunbundle 명령에 대한 몇 가지 가능한 구문 옵션을 보여 줍니다.

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

다음 블록에는 unpackunbundle 명령을 사용하는 예제가 포함되어 있습니다.

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를 나타내고 두 번째 문자열은 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 옵션을 사용하는 경우 매핑 파일에 "[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 는 가장 일반적인 배포 오류를 catch하고 앱 패키지가 유효한지 확인하는 데 도움이 되도록 설계된 제한된 수식 유효성 검사를 수행합니다. MakeAppx.exe를 사용하는 동안 유효성 검사를 건너뛰려면 /nv 옵션을 참조하세요.

이 유효성 검사는 다음을 보장합니다.

  • 패키지 매니페스트에서 참조되는 모든 파일은 앱 패키지에 포함됩니다.
  • 애플리케이션에는 두 개의 동일한 키가 없습니다.
  • 애플리케이션은 SMB, FILE, MS-WWA-WEB, MS-WWA 목록에서 사용할 수 없는 프로토콜을 등록하지 않습니다.

일반적인 오류만 catch하도록 설계되어 있으므로 완전한 의미 체계 유효성 검사는 아닙니다. MakeAppx.exe에서 빌드된 패키지는 설치 가능하지 않습니다.