명령줄 변환을 위한 템플릿 파일을 생성하는 방법

MSIX 패키징 도구를 사용하면 대화형 UI 또는 명령줄 옵션을 통해 두 가지 방법으로 변환을 수행할 수 있습니다. 명령줄을 사용하는 경우 변환이 특정 설정 및 요구 사항에 맞게 작동하도록 템플릿 파일을 제공해야 합니다. 이 문서는 적합한 템플릿 파일을 생성하는 프로세스를 안내하는 데 도움이 됩니다.

작동하는 템플릿 파일을 가져올 수 있는 두 가지 방법이 있습니다.

  • MSIX 패키징 도구의 UI를 사용할 수 있습니다. 도구의 설정에서 만든 각 MSIX 패키지를 사용하여 변환 템플릿 파일을 생성하도록 지정할 수 있습니다.
  • 샘플 템플릿사용하고 각 변환에 필요한 구성을 수동으로 입력할 수 있습니다.

MSIX 패키징 도구에서 변환 템플릿 파일 생성

  1. MSIX 패키징 도구를 시작합니다.
  2. 애플리케이션의 오른쪽 위 모서리에 있는 설정으로 이동합니다.
  3. '각 패키지를 사용하여 명령줄 파일 생성' 옵션이 선택되어 있는지 확인합니다.
  4. 필요한 설정을 변경하거나 수정합니다(예: 제외 항목, 종료 코드).
  5. 설정 저장
  6. 설치 관리자를 사용하여 애플리케이션 패키지 워크플로를 진행합니다.
    • 설치 관리자를 선택하지 않으면 변환 템플릿 파일을 생성할 수 없습니다.
    • exe를 사용하는 경우 변환 템플릿 파일을 생성하려면 설치 관리자에 자동 플래그를 전달해야 합니다.
  7. 변환이 끝나면 선택한 설치 관리자와 향후 변환에 다시 사용할 수 있는 현재 설정에 따라 템플릿 파일이 구성됩니다.
    • 기본적으로 변환 템플릿 파일은 MSIX 패키지와 동일한 위치에 저장되지만 패키지 만들기 페이지에서 템플릿 파일에 대한 별도의 저장 위치를 지정할 수 있습니다.
    • 각 변환이 끝날 때 출력하려는 MSIX에 따라 몇 가지 수정을 수행해야 합니다.

변환 템플릿 파일을 수동으로 편집

변환 템플릿 파일에 대한 템플릿 매개 변수를 수동으로 편집하여 적합한 템플릿 파일을 생성할 수 있습니다. 변환 템플릿 파일을 생성할 때는 템플릿 파일에 추가하는 기능에 주의해야 합니다. 일부는 작동하기 위해 추가 스키마 참조가 필요할 수 있습니다.

변환 템플릿 매개 변수 참조

변환 템플릿 파일에서 사용할 수 있는 매개 변수의 전체 목록입니다.

ConversionSettings 설명
설정:: AllowTelemetry [선택 사항] 도구의 호출에 원격 분석 로깅을 사용합니다.
설정:: ApplyAllPrepareComputerFixes [선택 사항] 권장되는 모든 컴퓨터 준비 수정 사항을 적용합니다. 다른 특성이 사용된 경우에는 설정할 수 없습니다.
설정:: GenerateCommandLineFile [선택 사항] 나중에 사용할 수 있도록 SaveLocation 디렉터리에 템플릿 파일 입력을 복사합니다.
설정:: AllowPromptForPassword [선택 사항] 필요하지만 지정되어 있지 않은 경우 사용자에게 Virtual Machine 및 서명 인증서에 대한 암호 입력을 요청하도록 도구에 지시합니다.
설정:: EnforceMicrosoftStoreVersioningRequirements [선택 사항] Microsoft Store 및 비즈니스용 Microsoft Store 배포에 필요한 패키지 버전 관리 체계를 강제 적용하도록 도구에 지시합니다.
설정:: ServerPortNumber [선택 사항] 원격 컴퓨터에 연결할 때 사용됩니다. 템플릿 스키마의 v2가 필요합니다.
설정:: AddPackageIntegrity [선택 사항] 생성된 모든 MSIX에 패키지 무결성을 추가합니다. 템플릿 스키마의 v5가 필요합니다.
ValidInstallerExitCodes [선택 사항] 0개 이상의 ValidInstallerExitCode 요소입니다. 템플릿 스키마의 v2가 필요합니다.
ValidInstallerExitCodes:: ValidInstallerExitCode [선택 사항] 도구에 익숙하지 않거나 다시 부팅해야 하는 설치 관리자 종료 코드를 지정합니다. 템플릿 스키마의 v2가 필요합니다.
ValidInstallerExitCodes:: ValidInstallerExitCode:: 다시 부팅 [선택 사항] 변환 중에 종료 코드가 다시 부팅을 트리거할지 여부를 지정합니다. 템플릿 스키마의 v3가 필요합니다.
ExclusionItems [선택 사항] 0개 이상의 FileExclusion 또는 RegistryExclusion 요소입니다. 모든 FileExclusion 요소는 RegistryExclusion 요소 앞에 나타나야 합니다.
ExclusionItems::FileExclusion [선택 사항] 패키징에 제외할 파일입니다.
ExclusionItems::FileExclusion::ExcludePath 패키징에 제외할 파일의 경로입니다.
ExclusionItems::RegistryExclusion [선택 사항] 패키징에 제외할 레지스트리 키입니다.
ExclusionItems::RegistryExclusion:: ExcludePath 패키징에 제외할 레지스트리 경로입니다.
PrepareComputer::DisableDefragService [선택 사항] 앱이 변환되는 동안 Windows 조각 모음을 사용하지 않도록 설정합니다. False로 설정된 경우 ApplyAllPrepareComputerFixes를 재정의합니다.
PrepareComputer:: DisableWindowsSearchService [선택 사항] 앱이 변환되는 동안 Windows Search를 사용하지 않도록 설정합니다. False로 설정된 경우 ApplyAllPrepareComputerFixes를 재정의합니다.
PrepareComputer:: DisableSmsHostService [선택 사항] 앱이 변환되는 동안 SMS 호스트를 사용하지 않도록 설정합니다. False로 설정된 경우 ApplyAllPrepareComputerFixes를 재정의합니다.
PrepareComputer:: DisableWindowsUpdateService [선택 사항] 앱이 변환되는 동안 Windows Update를 사용하지 않도록 설정합니다. False로 설정된 경우 ApplyAllPrepareComputerFixes를 재정의합니다.
SaveLocation [선택 사항] 도구의 저장 위치를 지정할 요소입니다. 지정되어 있지 않은 경우 패키지는 데스크톱 폴더에 저장됩니다.
SaveLocation::PackagePath [선택 사항] 결과 MSIX 패키지가 저장되는 파일 또는 폴더의 경로입니다.
SaveLocation::TemplatePath [선택 사항] 결과 명령줄 템플릿이 저장되는 파일 또는 폴더의 경로입니다.
Installer::Path 애플리케이션 설치 관리자의 경로입니다.
Installer::Arguments [선택 사항] 설치 관리자에 전달할 인수입니다. 이 도구는 "/qn /norestart INSTALLSTARTMENUSHORTCUTS=1 DISABLEADVTSHORTCUTS=1" 인수를 사용하여 MSI 설치 관리자를 자동으로 실행합니다. 참고: .exe 설치 관리자를 사용하는 경우 설치 관리자가 자동으로 실행되도록 하려면 인수를 전달해야 합니다.
Installer::InstallLocation [선택 사항] 설치된 파일의 애플리케이션 루트 폴더에 대한 전체 경로입니다(예: "C:\Program Files (x86)\MyAppInstalllocation").
설치 관리자::IsUnattendedInstallWithoutArgument [선택 사항] 앱에서 자동 인수 없이 '무인' 설치를 허용하는 경우 이 특성을 사용해야 합니다. 이 특성은 .exe 설치 관리자에만 사용됩니다.
VirtualMachine [선택 사항] 로컬 Virtual Machine에서 변환이 실행되도록 지정하는 요소입니다.
VirtualMachine::Name 변환 환경에 사용할 가상 머신의 이름입니다.
VirtualMachine::Username 변환 환경에 사용할 가상 머신의 사용자 이름입니다.
RemoteMachine [선택 사항] 변환이 원격 컴퓨터에서 실행되도록 지정하는 요소입니다. 템플릿 스키마의 v2가 필요합니다.
RemoteMachine:: ComputerName 변환 환경에 사용할 원격 머신의 이름입니다. 템플릿 스키마의 v2가 필요합니다.
RemoteMachine:: 사용자 이름 변환 환경에 사용할 원격 머신의 사용자 이름입니다. 템플릿 스키마의 v2가 필요합니다.
RemoteMachine:: EnableAutoLogon [선택 사항] 이렇게 하면 변환이 원활하게 계속되도록 원격 컴퓨터에서 다시 시작해야 하는 변환을 수행할 때 자동으로 다시 로그인됩니다. 템플릿 스키마의 V3가 필요합니다.
PackageInformation::PackageName MSIX 패키지의 패키지 이름입니다.
PackageInformation::PackageDisplayName MSIX 패키지의 패키지 표시 이름입니다.
PackageInformation::PublisherName MSIX 패키지의 게시자입니다.
PackageInformation::PublisherDisplayName MSIX 패키지의 게시자 표시 이름입니다.
PackageInformation::Version MSIX 패키지의 버전 번호입니다.
PackageInformation::P ackageDescription [선택 사항] MSIX 패키지에 대한 설명입니다. 템플릿 스키마의 v4가 필요합니다.
PackageInformation:: MainPackageNameForModificationPackage [선택 사항] 주 패키지 이름의 패키지 ID 이름입니다. 주(부모) 애플리케이션에서 종속성을 갖는 수정 패키지를 만들 때 사용합니다.
SigningInformation [선택 사항] Device Guard 서명에 대한 서명 정보를 지정하는 요소입니다. 템플릿 스키마의 v4가 필요합니다.
SigningInformation:: DeviceGuardSigning [선택 사항] Device Guard 서명 정보를 지정하는 요소입니다. 템플릿 스키마의 v4가 필요합니다.
DeviceGuardSigning:: TokenFile JSON 형식으로 Device Guard 서명에 필요한 Azure AD 액세스 토큰입니다. v4 템플릿 스키마가 필요합니다.
DeviceGuardSigning:: TimestampUrl [선택 사항] Device Guard에 서명할 때 애플리케이션이 인증서의 수명을 초과하여 설치되도록 하는 타임스탬프를 제공합니다. 템플릿 스키마의 v4가 필요합니다.
애플리케이션 [선택 사항] MSIX 패키지에서 애플리케이션 항목을 구성할 0개 이상의 애플리케이션 요소입니다.
Application::Id MSIX 애플리케이션에 대한 앱 ID입니다. 이 ID는 지정된 ExecutableName과 일치하는 것으로 감지된 애플리케이션 항목에 사용됩니다. 패키지의 실행 파일에 대해 여러 개의 애플리케이션 ID 값이 있을 수 있습니다.

이 값은 패키지 내 애플리케이션의 고유한 식별자로서, PRAID(패키지 상대 앱 식별자)라고도 합니다. ID는 패키지 내에서 고유해야 하지만(같은 ID는 같은 패키지에서 한 번 이상 사용할 수 없습니다), 전역적으로 고유하지 않아도 됩니다. 같은 ID를 사용하는 시스템에 다른 패키지가 있을 수 있습니다.

이 문자열에는 마침표로 구분된 영숫자 필드가 있습니다. 각 필드는 ASCII 알파벳 문자로 시작해야 합니다. 이러한 값을 필드 값으로 사용할 수 없습니다. "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8" 및 "LPT9"입니다.
Application::DisplayName MSIX 패키지의 앱 표시 이름입니다. 이 표시 이름은 지정된 ExecutableName과 일치하는 것으로 감지된 애플리케이션 항목에 사용됩니다.
Application::ExecutableName 패키지 매니페스트에 추가될 MSIX 애플리케이션의 실행 파일 이름입니다. 이 이름의 애플리케이션이 감지되지 않은 경우 해당 애플리케이션 항목은 무시됩니다.
Application::Description [선택 사항] MSIX 애플리케이션에 대한 앱 설명입니다. 사용되지 않은 경우 애플리케이션 DisplayName이 사용됩니다. 이 설명은 지정된 ExecutableName과 일치하는 것으로 감지된 애플리케이션 항목에 사용됩니다.
기능 [선택 사항] MSIX 패키지에 사용자 지정 기능을 추가할 0개 이상의 기능 요소입니다. "runFullTrust" 기능은 변환 중 기본값으로 추가됩니다.
Capability::Name MSIX 패키지에 추가할 기능입니다.

샘플 변환 템플릿 파일

<MsixPackagingToolTemplate
    xmlns="http://schemas.microsoft.com/appx/msixpackagingtool/template/2018"
    xmlns:V2="http://schemas.microsoft.com/msix/msixpackagingtool/template/1904"
    xmlns:V3="http://schemas.microsoft.com/msix/msixpackagingtool/template/1907"
    xmlns:V4="http://schemas.microsoft.com/msix/msixpackagingtool/template/1910"
    xmlns:V5="http://schemas.microsoft.com/msix/msixpackagingtool/template/2001">
<!--Note: You only need to include xmlns:v2 - xmlns:v5 if you are using one of the features that use those schemas -->

    <Settings
        AllowTelemetry="true"
        ApplyAllPrepareComputerFixes="true"
        GenerateCommandLineFile="true"
        AllowPromptForPassword="false" 
	    EnforceMicrosoftStoreVersioningRequirements="false"
        v2:ServerPortNumber="1599"
        v5:AddPackageIntegrity="true">    

	<!--Note: Exclusion items are optional and if declared take precedence over the default tool exclusion items
        <ExclusionItems>
            <FileExclusion ExcludePath="[{CryptoKeys}]" />
            <FileExclusion ExcludePath="[{Common AppData}]\Microsoft\Crypto" />
            <FileExclusion ExcludePath="[{Common AppData}]\Microsoft\Search\Data" />
            <FileExclusion ExcludePath="[{Cookies}]" />
            <FileExclusion ExcludePath="[{History}]" />
            <FileExclusion ExcludePath="[{Cache}]" />
            <FileExclusion ExcludePath="[{Personal}]" />
            <FileExclusion ExcludePath="[{Profile}]\Local Settings" />
            <FileExclusion ExcludePath="[{Profile}]\NTUSER.DAT.LOG1" />
            <FileExclusion ExcludePath="[{Profile}]\ NTUSER.DAT.LOG2" />
            <FileExclusion ExcludePath="[{Recent}]" />
            <FileExclusion ExcludePath="[{Windows}]\debug" />
            <FileExclusion ExcludePath="[{Windows}]\Logs\CBS" />
            <FileExclusion ExcludePath="[{Windows}]\Temp" />
            <FileExclusion ExcludePath="[{Windows}]\WinSxS\ManifestCache" />
            <FileExclusion ExcludePath="[{Windows}]\WindowsUpdate.log" />
	    <FileExclusion ExcludePath="[{Windows}]\Installer" />
            <FileExclusion ExcludePath="[{AppVPackageDrive}]\$Recycle.Bin " />
            <FileExclusion ExcludePath="[{AppVPackageDrive}]\System Volume Information" />
	    <FileExclusion ExcludePath="[{AppVPackageDrive}]\Config.Msi" />
            <FileExclusion ExcludePath="[{AppData}]\Microsoft\AppV" />
            <FileExclusion ExcludePath="[{Common AppData}]\Microsoft\Microsoft Security Client" />
            <FileExclusion ExcludePath="[{Common AppData}]\Microsoft\Microsoft Antimalware" />
            <FileExclusion ExcludePath="[{Common AppData}]\Microsoft\Windows Defender" />
            <FileExclusion ExcludePath="[{ProgramFiles}]\Microsoft Security Client" />
            <FileExclusion ExcludePath="[{ProgramFiles}]\Windows Defender" />
	    <FileExclusion ExcludePath="[{ProgramFiles}]\WindowsApps" />
            <FileExclusion ExcludePath="[{Local AppData}]\Temp" />
	    <FileExclusion ExcludePath="[{Local AppData}]\Microsoft\Windows" />
	    <FileExclusion ExcludePath="[{Local AppData}]\Packages" />

            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Microsoft\Cryptography" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware Setup" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Security Client" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Policies\Microsoft\Microsoft Antimalware" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\StreamMRU" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\StreamMRU" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Streams" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Microsoft\AppV" />
            <RegistryExclusion ExcludePath= "REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\AppV" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\AppV" />
            <RegistryExclusion ExcludePath= "REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\AppV" />
        </ExclusionItems>
	-->
    
    <!--Note: Specifying an installer exit code will allow you to automatically trigger a reboot during your conversion
      <v2:ValidInstallerExitCodes>
        <V2:ValidInstallerExitCode ExitCode="3010" V3:Reboot="true"/>
        <V2:ValidInstallerExitCode ExitCode="1641"/>
      </v2:ValidInstallerExitCodes>
    -->
	    
    </Settings>

    <!--Note: this section takes precedence over the Settings::ApplyAllPrepareComputerFixes attribute and is optional
    <PrepareComputer
        DisableDefragService="true"
        DisableWindowsSearchService="true"
        DisableSmsHostService="true"
        DisableWindowsUpdateService="true"/>
    -->

    <SaveLocation
        PackagePath="C:\users\user\Desktop\MyPackage.msix" 
        TemplatePath="C:\users\user\Desktop\MyTemplate.xml" />

    <Installer
        Path="C:\MyAppInstaller.msi"
        InstallLocation="C:\Program Files\MyAppInstallLocation" />
	
    <!--NOTE: This section specifies that the conversion will be run on a local Virtual Machine. This is optional if you want to change your conversion environment from the default local machine.
    <VirtualMachine Name="vmname" Username="vmusername"/>
    -->

    <!--NOTE: This section specifies that the conversion will be run on a remote machine.This is optional if you want to change your conversion environment from the default local machine.
    <v2:RemoteMachine ComputerName="vmname" Username="vmusername" v3:EnableAutoLogon="true"/>
    -->

    <PackageInformation
        PackageName="MyAppPackageName"
        PackageDisplayName="MyApp Display Name"
        PublisherName="CN=MyPublisher"
        PublisherDisplayName="MyPublisher Display Name"
        Version="1.1.0.0"
        MainPackageNameForModificationPackage="MainPackageIdentityName">

    <!--Note: This is optional, if you want to sign your package with Device Guard signing
        <v4:SigningInformation>
            <v4:DeviceGuardSigning
                Tokenfile="tokenfile.json"
                TimestampUrl="https://mytimestamp.com"/>
        </v4:SigningInformation>
    -->
        
	<!--NOTE: This ID will be used if the Application entry detected matches the specified ExecutableName
        <Applications>
            <Application
                Id="MyApp1"
                Description="MyApp"
                DisplayName="My App"
                ExecutableName="MyApp.exe"/>
        </Applications>
	-->

	<!--NOTE: This is optional as “runFullTrust” capability is added by default during conversion
        <Capabilities>
            <Capability Name="runFullTrust" />
        </Capabilities>
	-->
	    
    </PackageInformation>
</MsixPackagingToolTemplate>