UE-V 2.1 SP1 的应用程序模板架构参考

Microsoft用户体验虚拟化 (UE-V) 2.1 SP1 使用 XML 设置位置模板来定义 UE-V 捕获和应用的桌面应用程序设置和 Windows 设置。 UE-V 包括一组默认设置位置模板。 还可以使用 UE-V 生成器创建自定义设置位置模板。

高级用户可以自定义设置位置模板的 XML 文件。 本文详细介绍了 UE-V 2.1 SP1 设置位置模板的 XML 结构,并提供编辑这些文件的指导。

UE-V 2.1 SP1 应用程序模板架构参考

本部分详细介绍 UE-V 2.1 SP1 设置位置模板的 XML 结构,并提供编辑此文件的指南。

XML 声明和编码属性

必需:True

类型:字符串

XML 声明必须指定 XML 版本 1.0 属性 (<?xml version="1.0">) 。 UE-V 生成器创建的设置位置模板保存在 UTF-8 编码中,但未显式指定编码。 建议在此元素中包含 encoding=“UTF-8”属性作为最佳做法。 产品附带的所有模板也指定此标记。 有关参考,请参阅 中的 %ProgramFiles%\Microsoft User Experience Virtualization\Templates文档。

例如:

<?xml version="1.0" encoding="UTF-8"?>

Namespace和根元素

必需:True

类型:字符串

UE-V 对所有应用程序使用 https://schemas.microsoft.com/UserExperienceVirtualization/2012/SettingsLocationTemplate 命名空间。 SettingsLocationTemplate 是根元素,包含所有其他元素。 使用此标记的所有模板中的引用 SettingsLocationTemplate

<SettingsLocationTemplate xmlns='https://schemas.microsoft.com/UserExperienceVirtualization/2012/SettingsLocationTemplate'>

数据类型

这些项是 UE-V 应用程序模板架构的数据类型。

  • GUID:GUID 描述标准全局唯一标识符 (GUID) 正则表达式 (正则表达式) 的形式 \{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}。 此 GUID 在 元素中 Filesetting\Root\KnownFolder 用于验证已知文件夹的格式设置。

  • FilenameString:FilenameString 是指要监视的进程的文件名。 以下正则表达式限制其值: [^\\\?\*\|<>/:]+。 换句话说,它们不能包含以下字符:

    • 反斜杠字符 (\)
    • 星号 (*)
    • 问号 (?)
    • 管道字符 (|)
    • 大于符号 (>)
    • 小于签名 (<)
    • 正斜杠 (/)
    • 冒号 (:)
  • IDStringIDString 指 Application 元素、SettingsLocationTemplate 和 Common 元素的 ID 值, (用于描述) 共享通用设置的应用程序套件。 它受 FilenameString () [^\\\?\*\|<>/:]+ 相同的正则表达式的限制。

  • TemplateVersion:TemplateVersion 是一个整数值,用于描述设置位置模板的修订。 其值的范围可以是 0 到 2147483647。

  • :空表示 null 值。 此数据在 Process\ShellProcess 中用于指示没有要监视的进程。 不应在任何应用程序模板中使用此值。

  • 作者:作者数据类型是标识模板作者的复杂类型。 它包含两个子元素: NameEmail。 在 Author 数据类型中,Name 元素是必需的,而 Email 元素是可选的。 SettingsLocationTemplate 元素下更详细地描述了此类型。

  • Range:Range 定义由两个子元素组成的整数类: MinimumMaximum。 此数据类型在 ProcessVersion 数据类型中实现。 如果指定,则必须同时包含最小值和最大值。

  • ProcessVersion:ProcessVersion 定义了具有四个子元素的类型: MajorMinorBuildPatch。 Process 元素使用此数据类型来填充其 ProductVersion 和 FileVersion 值。 此类型的数据是 Range 值。 Major 子元素是必需的,其他子元素是可选的。

  • 体系结构:体系结构枚举两个可能的值: Win32Win64。 这些值用于指定进程体系结构。

  • 进程:进程数据类型是一个容器,用于描述要监视的 UE-V 的进程。 它包含六个子元素: FilenameArchitectureProductNameFileDescriptionProductVersionFileVersion。 下表详细介绍了每个元素各自的数据类型:

元素 数据类型 Mandatory
文件名 FilenameString True
体系结构 体系结构 False
ProductName 字符串 False
FileDescription 字符串 False
ProductVersion ProcessVersion False
FileVersion ProcessVersion False
  • 进程:Process 数据类型表示一个或多个 Process 元素集合的容器。 Process 序列类型支持两个子元素: ProcessShellProcess。 Process 是 Process 类型的元素,ShellProcess 的数据类型为 Empty。 序列中必须至少标识一项。

  • 路径:RegistrySetting 和 FileSetting 使用路径来引用注册表和文件路径。 此元素支持两个可选属性: RecursiveDeleteIfNotFound。 这两个值都设置为 default=“False”。

    递归指示文件设置包含路径和所有子文件夹,或者注册表设置包含所有子注册表项。 在这两种情况下,当前级别的所有项都包含在捕获的数据中。 对于 FileSettings 对象,指定文件夹中的所有文件都包含在 UE-V 捕获的数据中,但不包括文件夹。 对于注册表路径,将捕获当前路径中的所有值,但不会捕获子注册表项。 在这两种情况下,都应小心避免捕获大型数据集或大量项。

    DeleteIfNotFound 属性从用户的设置存储路径数据中删除设置。 如果从包中删除这些设置会在设置存储路径文件服务器上节省大量磁盘空间,则此属性非常有用。

  • FileMask:FileMask 仅为 Path 属性定义的文件夹指定某些文件类型。 例如,“路径”可以是 C:\users\username\files ,FileMask 可能 *.txt 仅包含文本文件。

  • RegistrySetting:RegistrySetting 表示注册表项和值以及 UE-V 代理相关所需行为的容器。 此类型中定义了四个子元素: PathNameExclude 以及值 PathName 的序列。

  • FileSetting:FileSetting 包含与文件和文件路径关联的参数。 定义了四个子元素: RootPathFileMaskExclude。 根是必需的,其他根是可选的。

  • 设置:Settings 属性是应用于特定模板的所有设置的容器。 它包含前面所述的注册表、文件、SystemParameter 和 CustomAction 设置的实例。 此外,它还可以包含以下子元素,其行为描述如下:

元素 说明
异步 在不阻止应用程序启动的情况下应用异步设置包,以便应用程序在仍应用设置的同时继续启动。 此元素适用于可以异步应用的设置,例如 get/set 通过 API(如 SystemParameterSetting)的设置。
PreventOverlappingSynchronization 默认情况下,仅当使用模板的应用程序的最后一个实例关闭时,UE-V 才会保存应用程序的设置。 当此元素设置为 false 时,即使应用程序的其他实例正在运行,UE-V 也会导出设置。 适合的模板(包含 UE-V 附带的 Common 元素部分的模板)使用此标志使共享设置在应用程序关闭时始终导出,同时阻止应用程序特定的设置在关闭最后一个实例之前导出。
AlwaysApplySettings 此参数强制应用导入的设置包,即使包与应用程序的当前状态之间没有差异也是如此。 此参数应仅在特殊情况下使用,因为它可能会减慢设置导入的速度。

Name 元素

必需:True

类型:字符串

名称指定设置位置模板的唯一名称。 这用于在 WMI、PowerShell、事件查看器和调试日志中引用模板时用于显示。 通常,请避免引用版本信息,因为 ProductVersion 元素可能会对此提出反对。 例如,指定 <Name>My Application</Name> 而不是 <Name>My Application 1.1</Name>

注意

UE-V 不引用外部 DTD,因此无法在设置位置模板中使用命名实体。 例如,不要使用 &reg; 来引用注册商标标志 (®) 。 请改用规范编号引用来包括这些类型的特殊字符,例如, &#174 对于注册商标字符 (®) 。 此规则适用于本文档中的所有字符串值。

有关字符实体的完整列表,请参阅 W3 XHTML 1.0 - DTD。 UTF-8 编码的文档可能直接包含 Unicode 字符。 通过 UE-V 生成器保存模板会自动将字符实体转换为其 Unicode 表示形式。

ID 元素

必需:True

类型:字符串

ID 填充特定模板的唯一标识符。 例如,此标记将成为 UE-V 代理用于在运行时引用模板的主要标识符 (,例如,请参阅 Get-UevTemplate 的输出,Get-UevTemplateProgram PowerShell cmdlet) 。 按照约定,此标记不应包含任何空格,这简化了脚本编写。 应在此元素中指定应用程序的版本号,以便轻松识别模板,例如 <ID>MicrosoftCalculator6</ID><ID>MicrosoftOffice2010Win64</ID>

Version 元素

必需:True

类型:整数

最小值:0

最大值:2147483647

版本标识用于管理跟踪更改的设置位置模板的版本。 每次保存模板时,UE-V 生成器会自动递增此数字。 请注意,此字段必须是整数;不允许使用小数值,例如 <Version>2.5</Version>

提示

可以使用 XML 注释标记 <!-- -->保存有关版本更改的注释,例如:

  <!--
     Version History

     Version 1 Jul 05, 2012 Initial template created by Generator - Denise@Contoso.com
     Version 2 Jul 31, 2012 Added support for app.exe v2.1.3 - Mark@Contoso.com
     Version 3 Jan 01, 2013 Added font settings support - Mark@Contoso.com
     Version 4 Jan 31, 2013 Added support for plugin settings - Tony@Contoso.com
   -->
  <Version>4</Version>

重要提示

查询此值以确定是否应将新版本的模板应用于以下实例中的现有模板:

  • 计划的模板自动更新任务何时运行。

  • 运行 Update-UevTemplate PowerShell cmdlet 时。

  • microsoft\uev:SettingsLocationTemplate通过 WMI 调用 Update 方法时。

Author 元素

必需:False

类型:字符串

作者标识设置位置模板的创建者。 支持两个可选的子元素: NameEmail。 这两个属性都是可选的,但如果指定了 Email 子元素,则必须附带 Name 元素。 作者是指设置位置模板的联系人全名,电子邮件应引用作者的电子邮件地址。 建议在公开发布的模板中包含此信息。

进程和进程元素

必需:True

类型:元素

Process 元素包含至少一个 <Process> 元素,后者又包含以下子元素: FilenameArchitectureProductNameFileDescriptionProductVersionFileVersion。 Filename 子元素是必需的,其他元素是可选的。 完全填充的元素包含类似于以下示例的标记:

<Process>
  <Filename>MyApplication.exe</Filename>
  <Architecture>Win64</Architecture>
  <ProductName> MyApplication </ProductName>
  <FileDescription>MyApplication.exe</FileDescription>
  <ProductVersion>
    <Major Minimum="2" Maximum="2" />
    <Minor Minimum="0" Maximum="0" />
    <Build Minimum="0" Maximum="0" />
    <Patch Minimum="5" Maximum="5" />
  </ProductVersion>
  <FileVersion>
    <Major Minimum="2" Maximum="2" />
    <Minor Minimum="0" Maximum="0" />
    <Build Minimum="0" Maximum="0" />
    <Patch Minimum="5" Maximum="5" />
  </FileVersion>
</Process>

文件名

必需:True

类型:字符串

文件名是指可执行文件在文件系统中显示的实际文件名。 此元素指定 UE-V 用于评估模板是否应用于进程的主要条件。 必须在设置位置模板 XML 中指定此元素。

有效文件名不能与以下正则表达式匹配: [^\\\?\*\|<>/:]+。 换句话说,它们不能包含以下字符:

  • 反斜杠字符 (\)
  • 星号 (*)
  • 问号 (?)
  • 管道字符 (|)
  • 大于符号 (>)
  • 小于签名 (<)
  • 正斜杠 (/)
  • 冒号 (:)

提示

若要针对此正则表达式测试字符串,请使用 PowerShell 命令窗口,并将可执行文件的名称替换为 YourFileName

"YourFileName.exe" -match "[\\\?\*\|<>/:]+"

值为 True 表示字符串包含非法字符。 下面是非法值的一些示例:

  • \\server\share\program.exe

  • Program*.exe

  • Pro?ram.exe

  • Program<1>.exe

注意

UE-V 生成器将大于和小于字符分别编码为 &gt;&lt;

在极少数情况下,FileName 值不一定包括 .exe 扩展名,但应将其指定为值的一部分。 例如, <Filename>MyApplictication.exe</Filename> 应指定 而不是 <Filename>MyApplictication</Filename>。 如果可执行文件的实际名称为 MyApplication.exe,则第二个示例不会将模板应用于进程。

体系结构

必需:False

类型:体系结构 (字符串)

体系结构是指为其编译目标可执行文件的处理器体系结构。 有效值为 32 位应用程序的 Win32 或 64 位应用程序的 Win64。 如果存在,则此标记将设置位置模板的适用性限制为特定的应用程序体系结构。 例如,比较 %ProgramFiles%\Microsoft User Experience Virtualization\templates\MicrosoftOffice2010Win32.1SP1.xml UE-V 随附的 和 MicrosoftOffice2010Win64.xml 文件。 当可执行文件的不同版本之间的相对路径发生更改时,或者在从一个处理器体系结构移动到另一个处理器体系结构时添加或删除设置时,这很有用。

如果不存在此元素,设置位置模板将忽略进程的体系结构,如果文件名和其他属性适用,则同时应用于 32 位和 64 位进程。

注意

UE-V 在此版本中不支持 ARM 处理器。

ProductName

必需:False

类型:字符串

ProductName 是一个可选元素,用于标识用于管理目的或报告的产品。 ProductName 与 Filename 的不同之处在于,其值没有正则表达式限制。 这样可以更轻松地理解可执行文件名称不明显的进程的说明。 例如:

<Process>
  <Filename>MyApplication.exe</Filename>
  <ProductName>My Application 6.x by Contoso.com</ProductName>
  <ProductVersion>
    <Major Minimum="6" Maximum="6" />
  </ProductVersion>
</Process>

FileDescription

必需:False

类型:字符串

FileDescription 是一个可选标记,允许对可执行文件进行管理说明。 这是一个自由文本字段,可用于区分软件包中的多个可执行文件,其中需要标识可执行文件的功能。

例如,在合适的应用程序中,提供两个可执行文件 (MyApplication.exe 和 MyApplicationHelper.exe) 的功能提醒可能很有用,如下所示:

<Processes>
  <Process>
    <Filename>MyApplication.exe</Filename>
    <FileDescription>My Application Main Engine</ FileDescription>
    <ProductVersion>
      <Major Minimum="6" Maximum="6" />
    </ProductVersion>
  </Process>
  <Process>
    <Filename>MyApplicationHelper.exe</Filename>
    <FileDescription>My Application Background Process Executable</FileDescription>
    <ProductVersion>
      <Major Minimum="6" Maximum="6" />
    </ProductVersion>
  </Process>
</Processes>

ProductVersion

必需:False

类型:字符串

ProductVersion 是指文件的主要和次要产品版本,以及内部版本和修补程序级别。 ProductVersion 是可选元素,但如果指定,它必须至少包含 Major 子元素。 该值必须以 Minimum=“X” Maximum=“Y”的形式表示一个范围,其中 X 和 Y 是整数。 最小值和最大值可以相同。

产品和文件版本元素可以保持未指定。 这样做会使模板版本不可知,这意味着模板适用于指定可执行文件的所有版本。

示例 1:产品版本 1.0

产品版本:UE-V 生成器中指定的 1.0 生成以下 XML:

<ProductVersion>
  <Major Minimum="1" Maximum="1" />
  <Minor Minimum="0" Maximum="0" />
</ProductVersion>

示例 2:产品版本 5.0.2.1000

文件版本:UE-V 生成器中指定的 5.0.2.1000 生成以下 XML:

<FileVersion>
  <Major Minimum="5" Maximum="5" />
  <Minor Minimum="0" Maximum="0" />
  <Build Minimum="2" Maximum="2" />
  <Patch Minimum="1000" Maximum="1000" />
</FileVersion>

示例 1 不正确 - 范围不完整

仅存在 Minimum 属性。 范围中也必须包含最大值。

<ProductVersion>
  <Major Minimum="2" />
</ProductVersion>

示例 2 不正确 - 指定了不带 Major 元素的次要元素

只有 Minor 元素存在。 还必须包括专业。

<ProductVersion>
  <Minor Minimum="0" Maximum="0" />
</ProductVersion>

FileVersion

必需:False

类型:字符串

FileVersion 区分已发布应用程序的发布版本和组件可执行文件的内部生成详细信息。 对于大多数商业应用程序,这些数字是相同的。 如果它们有所不同,则文件的产品版本指示文件的通用版本标识,而文件版本指示文件的特定版本 (,如修补程序或更新) 中所示。 这可以唯一标识文件,而不会中断检测逻辑。

若要确定特定可执行文件的产品版本和文件版本,请在 Windows 资源管理器中右键单击该文件,选择“属性”,然后在“详细信息”选项卡上选择。

为应用程序添加 FileVersion 元素可实现更精细的微调检测逻辑,但对于大多数应用程序来说都不需要。 首先检查 ProductVersion 元素设置,然后选中 FileVersion。 应用限制性更高的设置。

FileVersion 的子元素和语法规则与 ProductVersion 的子元素和语法规则相同。

<Process>
  <Filename>MSACCESS.EXE</Filename>
  <Architecture>Win32</Architecture>
  <ProductVersion>
    <Major Minimum="14" Maximum="14" />
    <Minor Minimum="0" Maximum="0" />
  </ProductVersion>
  <FileVersion>
    <Major Minimum="14" Maximum="14" />
    <Minor Minimum="0" Maximum="0" />
  </FileVersion>
</Process>

应用程序元素

应用程序是适用于特定应用程序的设置的容器。 它是以下字段/类型的集合。

字段/类型 说明
名称 指定设置位置模板的唯一名称。 这用于在 WMI、PowerShell、事件查看器和调试日志中引用模板时用于显示。 有关详细信息,请参阅 名称
ID 填充特定模板的唯一标识符。 此标记将成为 UE-V 代理在运行时引用模板时使用的主要标识符。 有关详细信息,请参阅 ID
说明 模板的可选说明。
LocalizedNames UI 中显示的可选名称,由语言区域设置本地化。
LocalizedDescriptions 由语言区域设置本地化的可选模板说明。
版本 标识用于管理跟踪更改的设置位置模板的版本。 有关详细信息,请参阅 版本
DeferToMSAccount 控制是否使用 Microsoft 帐户启用此模板。 如果为计算机上的用户启用了 MSA 同步,则会自动禁用此模板。
DeferToOffice365 与 MSA 类似,它控制是否通过 Office365 启用此模板。 如果使用 Office 365 同步设置,则会自动禁用此模板。
FixedProfile 指定此模板只能与此元素中指定的配置文件相关联,不能通过 WMI 或 PowerShell 进行更改。
进程 一个或多个 Process 元素集合的容器。 有关详细信息,请参阅 进程
“设置” 适用于特定模板的所有设置的容器。 它包含注册表、文件、SystemParameter 和 CustomAction 设置的实例。 有关详细信息,请参阅数据类型中的设置

Common 元素

Common 类似于 Application 元素,但它始终与两个或多个 Application 元素相关联。 Common 部分表示这些应用程序实例之间共享的设置集。 它是以下字段/类型的集合。

字段/类型 说明
名称 指定设置位置模板的唯一名称。 这用于在 WMI、PowerShell、事件查看器和调试日志中引用模板时用于显示。 有关详细信息,请参阅 名称
ID 填充特定模板的唯一标识符。 此标记将成为 UE-V 代理在运行时引用模板时使用的主要标识符。 有关详细信息,请参阅 ID
说明 模板的可选说明。
LocalizedNames UI 中显示的可选名称,由语言区域设置本地化。
LocalizedDescriptions 由语言区域设置本地化的可选模板说明。
版本 标识用于管理跟踪更改的设置位置模板的版本。 有关详细信息,请参阅 版本
DeferToMSAccount 控制是否使用 Microsoft 帐户启用此模板。 如果为计算机上的用户启用了 MSA 同步,则会自动禁用此模板。
DeferToOffice365 与 MSA 类似,它控制是否通过 Office365 启用此模板。 如果使用 Office 365 同步设置,则会自动禁用此模板。
FixedProfile 指定此模板只能与此元素中指定的配置文件相关联,不能通过 WMI 或 PowerShell 进行更改。
“设置” 适用于特定模板的所有设置的容器。 它包含注册表、文件、SystemParameter 和 CustomAction 设置的实例。 有关详细信息,请参阅数据类型中的设置

SettingsLocationTemplate 元素

此元素定义单个应用程序或应用程序套件的设置。

字段/类型 说明
名称 指定设置位置模板的唯一名称。 这用于在 WMI、PowerShell、事件查看器和调试日志中引用模板时用于显示。 有关详细信息,请参阅 名称
ID 填充特定模板的唯一标识符。 此标记将成为 UE-V 代理在运行时引用模板时使用的主要标识符。 有关详细信息,请参阅 ID
说明 模板的可选说明。
LocalizedNames UI 中显示的可选名称,由语言区域设置本地化。
LocalizedDescriptions 由语言区域设置本地化的可选模板说明。

附录:SettingsLocationTemplate.xsd

下面是显示其元素、子元素、属性和参数的 SettingsLocationTemplate.xsd 文件:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="UevSettingsLocationTemplate"
  targetNamespace="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
  elementFormDefault="qualified"
  xmlns="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
  xmlns:mstns="https://schemas.microsoft.com/UserExperienceVirtualization/2013A/SettingsLocationTemplate"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="Guid">
        <xs:restriction base="xs:string">
            <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="FilenameString">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^\\\?\*\|&lt;&gt;/:]+" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="IDString">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^\\\?\*\|&lt;&gt;/:.]+" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="CompositeIDString">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^\\\?\*\|&lt;&gt;/:.]+([.][^\\\?\*\|&lt;&gt;/:.]+)?" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="TemplateVersion">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="0" />
            <xs:maxInclusive value="2147483647" />
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="Empty">
        <xs:sequence/>
    </xs:complexType>

    <xs:complexType name="LocalizedString">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Locale" type="xs:string" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="LocalizedName">
        <xs:sequence>
            <xs:element name="Name" type="LocalizedString" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocalizedDescription">
        <xs:sequence>
            <xs:element name="Description" type="LocalizedString" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ReplacedTemplates">
      <xs:sequence>
        <xs:element name="ID" type="CompositeIDString" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Author">
        <xs:all>
            <xs:element name="Name" type="xs:string" minOccurs="1" />
            <xs:element name="Email" type="xs:string" minOccurs="0" />
        </xs:all>
    </xs:complexType>

    <xs:complexType name="Range">
        <xs:attribute name="Minimum" type="xs:integer" use="required"/>
        <xs:attribute name="Maximum" type="xs:integer" use="required"/>
    </xs:complexType>

    <xs:complexType name="ProcessVersion">
        <xs:sequence>
            <xs:element name="Major" type="Range" minOccurs="1" />
            <xs:element name="Minor" type="Range" minOccurs="0" />
            <xs:element name="Build" type="Range" minOccurs="0" />
            <xs:element name="Patch" type="Range" minOccurs="0" />
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="Architecture">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Win32"/>
            <xs:enumeration value="Win64"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="Process">
        <xs:sequence>
            <xs:element name="Filename" type="FilenameString" minOccurs="1" />
            <xs:element name="Architecture" type="Architecture" minOccurs="0" />
            <xs:element name="ProductName" type="xs:string" minOccurs="0" />
            <xs:element name="FileDescription" type="xs:string" minOccurs="0" />
            <xs:element name="ProductVersion" type="ProcessVersion" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="FileVersion" type="ProcessVersion" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Processes">
        <xs:sequence>
            <xs:choice minOccurs="1">
                <xs:element name="Process" type="Process" />
                <xs:element name="ShellProcess" type="Empty" />
            </xs:choice>
            <xs:element name="Process" type="Process" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Path">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Recursive" type="xs:boolean" default="false"/>
                <xs:attribute name="DeleteIfNotFound" type="xs:boolean" default="false"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="RegistrySetting">
        <xs:sequence>
            <xs:element name="Path" type="Path" />
            <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="Exclude" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Path" type="Path" minOccurs="0" />
                        <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FileSetting">
        <xs:sequence>

            <xs:element name="Root">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="KnownFolder" type="Guid" />
                        <xs:element name="RegistryEntry" type="xs:string" />
                        <xs:element name="EnvironmentVariable" type="xs:string" />
                    </xs:choice>
                </xs:complexType>
            </xs:element>

            <xs:element name="Path" minOccurs="0" type="Path" />
            <xs:element name="FileMask" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>

            <xs:element name="Exclude" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Path" type="Path" minOccurs="0" />
                        <xs:element name="FileMask" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="CustomActionSetting">
        <xs:restriction base="xs:anyURI"/>
    </xs:simpleType>

    <xs:simpleType name="SystemParameterSetting">
        <xs:restriction base="xs:string">

            <!-- Accessibility parameters -->
            <xs:enumeration value="AccessTimeout"/>
            <xs:enumeration value="AudioDescription"/>
            <xs:enumeration value="ClientAreaAnimation"/>
            <xs:enumeration value="DisableOverlappedContent"/>
            <xs:enumeration value="FilterKeys"/>
            <xs:enumeration value="FocusBorderHeight"/>
            <xs:enumeration value="FocusBorderWidth"/>
            <xs:enumeration value="HighContrast"/>
            <xs:enumeration value="MessageDuration"/>
            <xs:enumeration value="MouseClickLock"/>
            <xs:enumeration value="MouseClickLockTime"/>
            <xs:enumeration value="MouseKeys"/>
            <xs:enumeration value="MouseSonar"/>
            <xs:enumeration value="MouseVanish"/>
            <xs:enumeration value="ScreenReader"/>
            <xs:enumeration value="ShowSounds"/>
            <xs:enumeration value="SoundSentry"/>
            <xs:enumeration value="StickyKeys"/>
            <xs:enumeration value="ToggleKeys"/>

            <!-- Input parameters -->
            <xs:enumeration value="Beep"/>
            <xs:enumeration value="BlockSendInputResets"/>
            <xs:enumeration value="DefaultInputLang"/>
            <xs:enumeration value="DoubleClickTime"/>
            <xs:enumeration value="DoubleClkHeight"/>
            <xs:enumeration value="DoubleClkWidth"/>
            <xs:enumeration value="KeyboardCues"/>
            <xs:enumeration value="KeyboardDelay"/>
            <xs:enumeration value="KeyboardPref"/>
            <xs:enumeration value="KeyboardSpeed"/>
            <xs:enumeration value="Mouse"/>
            <xs:enumeration value="MouseButtonSwap"/>
            <xs:enumeration value="MouseHoverHeight"/>
            <xs:enumeration value="MouseHoverTime"/>
            <xs:enumeration value="MouseHoverWidth"/>
            <xs:enumeration value="MouseSpeed"/>
            <xs:enumeration value="MouseTrails"/>
            <xs:enumeration value="SnapToDefButton"/>
            <xs:enumeration value="WheelScrollChars"/>
            <xs:enumeration value="WheelScrollLines"/>

            <!-- Desktop parameters (limited subset) -->
            <xs:enumeration value="DeskWallpaper"/>
            <xs:enumeration value="DesktopColor"/>

        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="Settings">
        <xs:sequence>
            <xs:element name="Asynchronous" type="xs:boolean" minOccurs="0" />
            <xs:element name="PreventOverlappingSynchronization" type="xs:boolean" minOccurs="0" />
            <xs:element name="AlwaysApplySettings" type="xs:boolean" minOccurs="0" />
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Registry" type="RegistrySetting" />
                <xs:element name="File" type="FileSetting" />
                <xs:element name="SystemParameter" type="SystemParameterSetting" />
                <xs:element name="CustomAction" type="CustomActionSetting" />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Common">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" />
            <xs:element name="ID" type="IDString" />
            <xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
            <xs:element name="Description" type="xs:string" minOccurs="0" />
            <xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
            <xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />
            <xs:element name="Version" type="xs:integer" />
            <xs:element name="DeferToMSAccount" type="Empty"  minOccurs="0" />
            <xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
            <xs:element name="Settings" type="Settings" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Application">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" />
            <xs:element name="ID" type="IDString" />
            <xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
            <xs:element name="Description" type="xs:string" minOccurs="0" />
            <xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
            <xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />
            <xs:element name="Version" type="xs:integer" />
            <xs:element name="DeferToMSAccount" type="Empty"  minOccurs="0" />
            <xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
            <xs:element name="Processes" type="Processes" />
            <xs:element name="Settings" type="Settings" />
        </xs:sequence>
    </xs:complexType>


    <xs:element name="SettingsLocationTemplate">
        <xs:complexType>
            <xs:sequence>

                <xs:element name="Name" type="xs:string" />
                <xs:element name="ID" type="IDString" />
                <xs:element name="Description" type="xs:string" minOccurs="0" />
                <xs:element name="LocalizedNames" type="LocalizedName" minOccurs="0" />
                <xs:element name="LocalizedDescriptions" type="LocalizedDescription" minOccurs="0" />

                <xs:choice>

                    <!-- Single application -->
                    <xs:sequence>
                        <xs:element name="ReplacedTemplates" type="ReplacedTemplates" minOccurs="0" />
                        <xs:element name="Version" type="TemplateVersion" />
                        <xs:element name="Author" type="Author" minOccurs="0" />
                        <xs:element name="FixedProfile" type="xs:string"  minOccurs="0" />
                        <xs:element name="DeferToMSAccount" type="Empty"  minOccurs="0" />
                        <xs:element name="DeferToOffice365" type="Empty" minOccurs="0" />
                        <xs:element name="Processes" type="Processes" />
                        <xs:element name="Settings" type="Settings" />
                    </xs:sequence>

                    <!-- Suite of applications -->
                    <xs:sequence>
                        <xs:element name="ManageSuiteOnly" type="xs:boolean" minOccurs="0" />
                        <xs:element name="Author" type="Author" minOccurs="0" />
                        <xs:element name="FixedProfile" type="xs:string"  minOccurs="0" />
                        <xs:element name="Common" type="Common" />
                        <xs:element name="Application" type="Application" minOccurs="2" maxOccurs="unbounded" />
                    </xs:sequence>

                </xs:choice>

            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- SettingsLocationTemplate -->

</xs:schema>

使用自定义 UE-V 2.1 SP1 模板和 UE-V 2.1 SP1 生成器

UE-V 2.1 SP1 的技术参考