如何为命令行转换生成模板文件
使用 MSIX 打包工具,可以通过两种方式执行转换:通过交互式 UI 或命令行选项。 使用命令行时,需要提供模板文件,以便转换适用于特定的设置和需求。 本文将引导你完成生成适合你的模板文件的过程。
可通过两种方式获取适用于你的模板文件:
- 可以使用 MSIX 打包工具的 UI。 在工具的设置中,可以指定要使用创建的每个 MSIX 包生成转换模板文件。
- 可以采用示例模板,并手动输入每次转换所需的配置。
从 MSIX 打包工具生成转换模板文件
- 启动 MSIX 打包工具。
- 转到应用程序右上角的设置。
- 确保已选择“使用每个包生成命令行文件”选项。
- 对所需的设置进行任何其他更改或修改(例如排除项、退出代码)。
- 保存设置
- 使用安装程序完成应用程序包工作流。
- 如果未选择安装程序,将无法生成转换模板文件。
- 如果使用 exe,则需要将无提示标志传递给安装程序以生成转换模板文件。
- 转换结束时,将基于所选的安装程序配置模板文件,并获得可复用于将来转换的当前设置。
- 默认情况下,转换模板文件将保存在 MSIX 包所在的同一位置,但你可以在“创建包”页上为模板文件指定单独的保存位置。
- 仍需根据每次转换结束时想要输出的 MSIX 进行一些修改。
手动编辑转换模板文件
可以手动编辑转换模板文件的模板参数,以生成适合你的模板文件。 生成转换模板文件时,请注意将哪些功能添加到模板文件中,因为有些功能可能需要额外的架构引用才能正常工作。
转换模板参数参考
下面是可以在转换模板文件中使用的参数的完整列表。
ConversionSettings | 描述 |
---|---|
Settings:: AllowTelemetry | [可选] 为此工具调用启用遥测日志记录。 |
Settings:: ApplyAllPrepareComputerFixes | [可选] 应用所有建议的“准备计算机”修复程序。 使用其他特性时不能设置此参数。 |
Settings:: GenerateCommandLineFile | [可选] 将模板文件输入复制到 SaveLocation 目录,供将来使用。 |
Settings:: AllowPromptForPassword | [可选] 指示工具提示用户输入虚拟机和签名证书的密码(如果必须提供密码,但未指定密码)。 |
Settings:: EnforceMicrosoftStoreVersioningRequirements | [可选] 指示工具强制实施从 Microsoft Store 和适用于企业的 Microsoft Store 进行部署所需的包版本控制方案。 |
Settings:: ServerPortNumber | [可选] 连接到远程计算机时使用。 需要 v2 模板架构。 |
Settings:: AddPackageIntegrity | [可选] 将“包完整性”添加到每个生成的 MSIX。 需要 v5 模板架构。 |
ValidInstallerExitCodes | [可选] 0 个或多个 ValidInstallerExitCode 元素。 需要 v2 模板架构。 |
ValidInstallerExitCodes:: ValidInstallerExitCode | [可选] 指定该工具可能不熟悉或需要重新启动的任何安装程序退出代码。 需要 v2 模板架构。 |
ValidInstallerExitCodes:: ValidInstallerExitCode:: Reboot | [可选] 指定退出代码是否应在转换期间触发重新启动。 需要 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 更新。 如果设置为 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")。 |
Installer::IsUnattendedInstallWithoutArgument | [可选] 如果应用允许在没有无提示参数的情况下进行“无人参与”安装,则应使用此属性。 此属性仅供 .exe 安装程序使用。 |
VirtualMachine | [可选] 用于指定要在本地虚拟机上运行转换的元素。 |
VirtualMachine::Name | 转换环境使用的虚拟机的名称。 |
VirtualMachine::Username | 转换环境使用的虚拟机的用户名。 |
RemoteMachine | [可选] 用于指定要在远程计算机上运行转换的元素。 需要 v2 模板架构。 |
RemoteMachine:: ComputerName | 转换环境使用的远程计算机的名称。 需要 v2 模板架构。 |
RemoteMachine:: Username | 转换环境使用的远程计算机的用户名。 需要 v2 模板架构。 |
RemoteMachine:: EnableAutoLogon | [可选] 此操作会在远程计算机上执行需要重启的转换时自动重新登录,以便转换继续无缝进行。 需要 V3 模板架构。 |
PackageInformation::PackageName | MSIX 包的名称。 |
PackageInformation::PackageDisplayName | MSIX 包的显示名称。 |
PackageInformation::PublisherName | MSIX 包的发布者。 |
PackageInformation::PublisherDisplayName | MSIX 包的发布者显示名称。 |
PackageInformation::Version | MSIX 包的版本号。 |
PackageInformation::PackageDescription | [可选] MSIX 包的说明。 需要 v4 模板架构。 |
PackageInformation:: MainPackageNameForModificationPackage | [可选] 主包名称的包标识名称。 创建依赖于主(父)应用程序的修改包时,将使用此参数。 |
SigningInformation | [可选] 一个元素,用于指定 Device Guard 签名的签名信息。 需要 v4 模板架构。 |
SigningInformation:: DeviceGuardSigning | [可选] 用于指定 Device Guard 签名信息的元素。 需要 v4 模板架构。 |
DeviceGuardSigning:: TokenFile | Device Guard 以 JSON 格式签名所需的 Azure AD 访问令牌。 需要 v4 模板架构。 |
DeviceGuardSigning:: TimestampUrl | [可选] 使用 Device Guard 签名时提供时间戳,以确保应用程序在证书生存期之外安装。 需要 v4 模板架构。 |
应用程序 | [可选] 用于在 MSIX 包中配置应用程序条目的 0 个或多个 Application 元素。 |
Application::Id | MSIX 应用程序的应用 ID。 此 ID 将用于检测到的、与指定的 ExecutableName 匹配的应用程序条目。 可为包中的可执行文件提供多个应用程序 ID 值。 此值是包中应用程序的唯一标识符。 此值有时称作“包相对应用标识符”(PRAID)。 该 ID 必须在包中唯一(同一个 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 应用程序的应用说明。 如果不使用此参数,将使用应用程序显示名称。 此说明将用于检测到的、与指定的 ExecutableName 匹配的应用程序条目 |
功能 | [可选] 用于将自定义功能添加到 MSIX 包的 0 个或多个 Capability 元素。 在转换期间,默认会添加“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>