XML 元素库

概述

本主题描述了 XML 元素和帮助程序功能,你可以使用它们创建迁移 .xml 文件并配合“用户状态迁移工具”(USMT) 使用。我们假设你了解 XML 的基本知识。.

本主题内容

除了 XML 元素和帮助程序功能,该主题还描述了如何指定编码过的位置和位置模式、仅针对内部 USMT 使用的功能以及配合帮助程序功能使用的版本标记。

  • 元素和帮助程序功能

  • 附录

    • 指定位置

    • 内部 USMT 功能

    • 有效版本标记

元素和帮助程序功能

下表描述了可配合 USMT 使用的 XML 元素和帮助程序功能。

元素 A-K 元素 L-Z 帮助程序功能

<addObjects>

<attributes>

<bytes>

<commandLine>

<component>

<condition>

<conditions>

<content>

<contentModify>

<description>

<destinationCleanup>

<detect>

<detects>

<detection>

<displayName>

<environment>

<exclude>

<excludeAttributes>

<extensions>

<extension>

<externalProcess>

<icon>

<include>

<includeAttributes>

<library>

<location>

<locationModify>

<_locDefinition>

<manufacturer>

<merge>

<migration>

<namedElements>

<object>

<objectSet>

<path>

<paths>

<pattern>

<processing>

<plugin>

<role>

<rules>

<script>

<text>

<unconditionalExclude>

<variable>

<version>

<windowsObjects>

<condition> 功能

<content> 功能

<contentModify> 功能

<include> 和 <exclude> 筛选器功能

<locationModify> 功能

<merge> 功能

<script> 功能

内部 USMT 功能

<addObjects>

<addObjects> 元素模拟了在源计算机上存在一个或多个对象。子 <object> 元素提供了模拟对象的详细信息。如果该内容是 <script> 元素,则调用结果将是一系列对象。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <object>此外,你你必须指定 <location> 和 <attributes> 作为该 <object> 元素的子元素。

  • 可选子元素: <conditions>、 <condition>、 <script>

语法:

<addObjects>

</addObjects>

下述示例取自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<attributes>

<attributes> 元素定义了注册表项或文件的属性。

  • **出现次数:**对于每个 <object> 都是一次

  • 父元素: <object>

  • **子元素:**无

语法:

<attributes>内容</attributes>

设置 是否为必需?

内容

该内容取决于指定对象的类型。

  • 对于文件,该内容可能是包含任何以下属性(以逗号隔开)的字符串。

    • 存档

    • 只读

    • 系统

    • 隐藏

  • 对于注册表项,该内容可能是下述类型之一:



    • 字符串

    • ExpandString

    • Binary

    • DWord

    • REG_SZ

下述示例取自 MigApp.xml 文件:

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<bytes>

你必须只为文件指定 <bytes> 元素,这是因为,如果 <location> 对应注册表项或目录,那么将会忽略 <bytes>。

  • **出现次数:**零次或一次

  • 父元素: <object>

  • **子元素:**无

语法:

<bytes string="Yes|No" expand="Yes|No">内容</bytes>

设置 是否为必需?

string

No,默认值为 No。

确定是否将内容解释为字符串或字节。

expand

No(默认值 = Yes

当 expand 参数为 Yes 时,在源计算机环境中,会首先展开 <bytes> 元素的内容,然后进行解释。

内容

取决于该字符串的值。

  • 当字符串为 Yes:<bytes> 元素的内容将解释为字符串。

  • 当字符串为 No:<bytes> 元素的内容将解释为字节。每两个字符代表一个字节的十六进制值。例如,“616263”代表“abc”ANSI 字符串。包含字符串终止符的 UNICODE 字符串“abc”应该是“6100620063000000”。

下述示例取自 MigApp.xml 文件:

<object>
   <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
   <attributes>DWORD</attributes>
   <bytes>00000000</bytes>
</object> 

<commandLine>

运行 ScanState 和 LoadState 工具前后,如果你要启动或终止服务或应用程序,则你可能要使用 <commandLine> 元素。

  • **出现次数:**无限制

  • 父元素: <externalProcess>

  • **子元素:**无

语法:

<commandLine>CommandLineString</commandLine>

设置 是否为必需?

CommandLineString

有效的命令行。

<component>

<component> 是自定义 .xml 文件的必要元素。该元素定义了迁移 .xml 文件的最基本结构。例如,在 MigApp.xml 文件中,“Microsoft® Office 2003”组件包含另一个组件“Microsoft Office Access® 2003”。可以使用子元素定义组件。

一个组件可以嵌套在其他组件内部,即在下述两种情况下,<component> 元素可以是 <component> 你 <role> 元素的子元素:1) 当父元素 <component> 是容器时或 2) 子元素 <component> 拥有与父元素 <component> 相同的角色时。

  • **出现次数:**无限制

  • 父元素: <migration>、 <role>

  • 必需子元素: <role>、 <displayName>

  • 可选子元素: <manufacturer>、 <version>、 <description>、 <paths>、 <icon>、 <environment>、 <extensions>

语法:

<component type="System|Application|Device|Documents" context="User|System|UserAndSystem" defaultSupported="TRUE|FALSE|YES|NO"

hidden="Yes|No">

</component>

设置 是否为必需?

类型

你可以使用下述内容对设置进行分组,并定义组件类型。

  • 系统:操作系统设置。所有 Windows® 组件都按此类型定义。

    当 type="System" 而 defaultSupported="FALSE" 时,则除非 .xml 文件中存在等价组件,并在 LoadState 命令行上指定了该文件,否则不会迁移这些设置。例如,默认 MigSys.xml 文件包含 type="System" 而 defaultSupported="FALSE" 的组件。如果你在 ScanState 命令行指定了该文件,你必须还要在 LoadState 命令行指定该文件用于设置迁移。这是因为 LoadState 工具必须检测等价组件。即该组件必须拥有相同的迁移 .xml 文件 urlid 和相同的显示名称。否则 LoadState 工具将不会从存储中迁移这些设置。当源计算机正在运行 Windows XP 而你正在向 Windows Vista® 和 Windows XP 迁移时,这是很有益的,因为你可以针对两个目标计算机使用相同的存储。

  • 应用程序:应用程序设置。

  • 设备:设备设置。

  • 文档:指定文件。

上下文

Default = UserAndSystem

定义了该参数的范围,即是在特定用户的上下文中处理该组件,还是在整个操作系统处理该组件,或者在两种情况下处理该组件。

由 <component> 元素设置最大的可能范围。例如,如果 <component> 元素拥有用户的上下文并且 <rules> 元素拥有 UserAndSystem 的上下文,则 <rules> 元素会以假定拥有用户上下文的方式执行处理。如果 <rules> 元素拥有了系统的上下文,则它会这样工作,即似乎那里不存在 <rules> 元素。

  • 用户评估每位用户的组件。

  • 系统。仅为系统评估一次组件。

  • UserAndSystem。评估整个操作系统和每位用户的组件。

defaultSupported

(default = TRUE)

可以为 TRUE、FALSE、YES 或 NO 中的任何值。如果该参数为 FALSE(或 NO),则除非在目标计算机上存在等价组件,否则不会迁移该组件。

当 type="System" 且 defaultSupported="FALSE" 时,除非在 LoadState 命令行指定的 .xml 文件中存在等价组件,否则不会迁移该设置。例如,默认 MigSys.xml 文件包含 type="System" 而 defaultSupported="FALSE" 的组件。如果你在 ScanState 命令行指定了该文件,你必须还要在 LoadState 命令行指定该文件用于设置迁移。这是因为 LoadState 工具必须检测等价组件。即该组件必须拥有相同的迁移 .xml 文件 urlid 和相同的显示名称,否则 LoadState 工具将不会从存储中那些设置。当源计算机正在运行 Windows XP 而你正在向 Windows Vista 和 Windows XP 迁移时,这是很有益的,因为你可以针对两个目标计算机使用相同的存储。

隐藏

 

该参数仅用于内部 USMT。

有关示例,请参阅任何一个默认迁移 .xml 文件。

<condition>

虽然支持在 <detect>、<objectSet> 和 <addObjects> 元素下使用 <condition> 元素,但我们不建议使用它。在 USMT 的未来版本中可能否决该元素,这样你需要重写你的脚本。我们建议,如果你需要在 <objectSet> 和 <addObjects> 元素内部使用条件,则你可以使用更强大的 <conditions> 元素,该元素允许你编写复杂的布尔语句。

<condition> 元素带有布尔结果。可以使用该元素指定评估父元素的条件。如果任何一个现有条件返回 FALSE,则不会评估父元素。

  • **出现次数:**无限制。

  • 父元素: <conditions>、 <detect>、 <objectSet>、 <addObjects>

  • **子元素:**无

  • **帮助程序功能:**利用该元素,你可以使用下述 <condition> 功能:DoesOSMatch、IsNative64Bit() 、IsOSLaterThan、IsOSEarlierThan、DoesObjectExist、DoesFileVersionMatch、IsFileVersionAbove、IsFileVersionBelow、IsSystemContext、DoesStringContentEqual、DoesStringContentContain、IsSameObject、IsSameContent 和 IsSameStringContent。

语法:

<condition negation="Yes|No">ScriptName</condition>

设置 是否为必需?

无效

Default = No

“Yes”会反向调换该条件的 True/False 值。

ScriptName

在此迁移部分定义的脚本。

例如,

在下述代码示例中,<condition> 元素 A 和 B 由 AND 操作符连接到一起,因为它们处于分离的 <conditions> 部分中。例如:

<detection>
   <conditions>
      <condition>A</condition>
   </conditions>
   <conditions operation="AND">
      <condition>B</condition>
   </conditions>
</detection>

但是,在下述代码示例中,<condition> 元素 A 和 B 由 AND 操作符连接到一起,因为它们处于相同的 <conditions> 部分中。

<detection>
   <conditions>
      <condition>A</condition>
      <condition>B</condition>
   </conditions>
</detection>

<condition> 功能

<condition> 元素元素返回布尔值。你可以在 <addObjects> 条件中使用这些元素。

  • 操作系统版本功能

  • 对象内容功能

操作系统版本功能

  • DoesOSMatch

    所有匹配结果都区分大小写。

    语法:DoesOSMatch("OSType","OSVersion")

    设置 是否为必需?

    OSType

    该设置的唯一有效值是 NT。但是请注意,你必须为 <condition> 功能设置该设置,这样才会正常工作。

    OSVersion

    主要版本、次要版本、版本号以及更正服务盘版本,以句号分隔。例如,5.0.2600.Service Pack 1。也可以使用模式指定版本的部分说明内容。例如,5.0.*

    例如:

    <condition>MigXmlHelper.DoesOSMatch("NT"、"*")</condition>

  • IsNative64Bit

    如果迁移过程正在以本机 64 位过程(即在不带有 Windows on Windows (WOW) 的 64 位系统上运行的过程)方式运行,则 IsNative64Bit 功能将返回 TRUE。否则,它返回 FALSE。

  • IsOSLaterThan

    所有比较结果都区分大小写。

    语法:IsOSLaterThan("OSType","OSVersion")

    设置 是否为必需?

    OSType

    可以为 9xNT。如果 OSType 与当前操作系统的类型不匹配,则它将返回 FALSE。例如,如果当前操作系统基于 Windows NT 而 OSType 为“9x”,则该结果将为 FALSE。

    OSVersion

    主要版本、次要版本、版本号以及更正服务盘版本,以句号分隔。例如,5.0.2600.Service Pack 1。你也可以指定版本的部分说明内容,但不允许使用模式。例如,5.0

    如果当前操作系统比 OSVersion 更新或与它等同,则 IsOSLaterThan 函数将返回 TRUE。

    例如:

    <condition negation="Yes">MigXmlHelper.IsOSLaterThan("NT"、"6.0")</condition>

  • IsOSEarlierThan

    所有比较结果都区分大小写。

    语法:IsOSEarlierThan("OSType","OSVersion")

    设置 是否为必需?

    OSType

    可以为 9xNT。如果 OSType 与当前操作系统的类型不匹配,则它将返回 FALSE。例如,如果当前操作系统基于 Windows NT 而 OSType 为“9x”,则该结果将为 FALSE。

    OSVersion

    主要版本、次要版本、版本号以及更正服务盘版本,以句号分隔。例如,5.0.2600.Service Pack 1。你也可以指定版本的部分说明内容,但不允许使用模式。例如,5.0

    如果当前操作系统比 OSVersion 更早,则 IsOSEarlierThan 函数将返回 TRUE。

对象内容功能

  • DoesObjectExist

    如果存在匹配该位置模式的任何对象,则 DoesObjectExist 功能会返回 TRUE。否则,它返回 FALSE。在尝试枚举之前,会展开位置模式。

    语法:DoesObjectExist("ObjectType","EncodedLocationPattern")

    设置 是否为必需?

    ObjectType

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocationPattern

    指定位置允许使用的环境变量。

    有关元素示例,请参阅 MigApp.xml 文件。

  • DoesFileVersionMatch

    模式检查区分大小写。

    语法:DoesFileVersionMatch("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?

    EncodedFileLocation

    将检查文件的指定位置。允许使用的环境变量。

    VersionTag

    将检查有效版本标记值。

    VersionValue

    字符串模式。例如,“Microsoft*”。

    例如:

    <condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\msnmsgr.exe"、"ProductVersion"、"6.*")</condition>

    <condition>MigXmlHelper.DoesFileVersionMatch("%MSNMessengerInstPath%\msnmsgr.exe"、"ProductVersion"、"7.*")</condition>

  • IsFileVersionAbove

    如果文件版本比 VersionValue 更高,则 IsFileVersionAbove 函数将返回 TRUE。

    语法:IsFileVersionAbove("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?

    EncodedFileLocation

    将检查文件的指定位置。允许使用的环境变量。

    VersionTag

    将检查有效版本标记值。

    VersionValue

    比较对象的值。不能指定模式。

  • IsFileVersionBelow

    语法:IsFileVersionBelow("EncodedFileLocation","VersionTag","VersionValue")

    设置 是否为必需?

    EncodedFileLocation

    将检查文件的指定位置。允许使用的环境变量。

    VersionTag

    将检查有效版本标记值。

    VersionValue

    比较对象的值。不能指定模式。

  • IsSystemContext

    如果当前上下文是“System”,则 IsSystemContext 功能将返回 TRUE。否则,它返回 FALSE。

    语法:IsSystemContext()

  • DoesStringContentEqual

    如果给定对象的字符串表示与 StringContent 相同,则 DoesStringContentEqual 函数将返回 TRUE。

    语法:DoesStringContentEqual("ObjectType","EncodedLocation","StringContent")

    设置 是否为必需?

    ObjectType

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocationPattern

    将检查对象的指定位置。你可以指定环境变量。

    StringContent

    针对其进行检查的字符串。

    例如:

    <condition negation="Yes">MigXmlHelper.DoesStringContentEqual("File","%USERNAME%","")</condition>
    
  • DoesStringContentContain

    如果在对象的字符串表示中至少出现了一次 StrToFind,则 DoesStringContentContain 函数将返回 TRUE。

    语法:DoesStringContentContain("ObjectType","EncodedLocation","StrToFind")

    设置 是否为必需?

    ObjectType

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocationPattern

    将检查对象的指定位置。你可以指定环境变量。

    StrToFind

    将在给定对象的内容中搜索的字符串。

  • IsSameObject

    如果给定编码位置解析到同一物理对象,则 IsSameObject 功能将返回 TRUE。否则,它返回 FALSE。

    语法:IsSameObject("ObjectType","EncodedLocation1","EncodedLocation2")

    设置 是否为必需?

    ObjectType

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocation1

    第一个对象的指定位置。你可以指定环境变量。

    EncodedLocation2

    第二个对象的指定位置。你可以指定环境变量。

    例如:

    <objectSet>
         <condition negation="Yes">MigXmlHelper.IsSameObject("File","%CSIDL_FAVORITES%","%CSIDL_COMMON_FAVORITES%")</condition>
         <pattern type="File">%CSIDL_FAVORITES%\* [*]</pattern>
    </objectSet>
    
  • IsSameContent

    如果给定内容具有同样内容,则 IsSameContent 功能将返回 TRUE。否则,它返回 FALSE。将逐字节比较该内容。

    语法:IsSameContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    设置 是否为必需?

    ObjectType1

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocation1

    第一个对象的指定位置。你可以指定环境变量。

    ObjectType2

    定义第二个对象的类型。可以是文件或注册表。

    EncodedLocation2

    第二个对象的指定位置。你可以指定环境变量。

  • IsSameStringContent

    如果给定对象具有同样内容,则 IsSameStringContent 功能将返回 TRUE。否则,它返回 FALSE。该内容将被解释为字符串。

    语法:IsSameStringContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    设置 是否为必需?

    ObjectType1

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocation1

    第一个对象的指定位置。你可以指定环境变量。

    ObjectType2

    定义第二个对象的类型。可以是文件或注册表。

    EncodedLocation2

    第二个对象的指定位置。你可以指定环境变量。

<conditions>

<conditions> 元素会返回布尔结果,用于指定评估父元素的条件。USMT 会评估子元素,然后根据操作参数使用操作符 AND 或 OR 连接其结果。

  • **出现次数:**在其他 <conditions> 元素中不受限制。在 <detection>、 <rules>、 <addObjects> 和 <objectSet> 中限制出现次数为一次。

  • 父元素: <conditions>、 <detection>、 <environment>、 <rules>、 <addObjects> 和 <objectSet>

  • 子元素: <conditions>、 <condition>

语法:

<conditions operation="AND|OR">

</conditions>

设置 是否为必需?

操作

否,default = AND

定义基于子元素所获取结果而执行的布尔操作。

下述示例取自 MigApp.xml 文件:

<environment name="GlobalEnv">
   <conditions>
      <condition negation="Yes">MigXmlHelper.IsNative64Bit()</condition>
   </conditions>
   <variable name="HklmWowSoftware">
   <text>HKLM\Software</text>
   </variable>
</environment>

<content>

你可以使用 <content> 元素指定对象模式列表,从源计算机获取对象集。评估 <content> 内部的每个 <objectSet>。对于每个生成的对象模式列表,将枚举与其匹配的对象,并由筛选器参数筛选其内容。生成的字符串是 <content> 元素的输出结果。筛选器脚本返回一组位置。<objectSet> 父元素可以包含多个 <content> 子元素。

  • **出现次数:**无限制

  • 父元素: <objectSet>

  • 子元素: <objectSet>

  • **帮助程序功能:**你可以利用该元素使用下述 <content> 功能:ExtractSingleFile、ExtractMultipleFiles 和 ExtractDirectory。

语法:

<content filter="ScriptInvocation">

</content>

设置 是否为必需?

筛选器

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2")

针对 <include> 规则中对象集枚举的每个对象调用脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

<content> 功能

下述功能将从对象内容中生成模式。针对 <ObjectSet> 父元素正在枚举的每个对象调用这些功能。

  • ExtractSingleFile

    如果注册表值为 MULTI-SZ,则仅处理第一段。返回值是必须存在于系统上的文件的编码位置。如果该说明在注册表值中是正确的,但是该文件不存在,则本功能将返回 NULL。

    语法:ExtractSingleFile(Separators,PathHints)

    设置 是否为必需?

    分隔符

    可能在该注册表值名称中附加在文件说明的可能分隔符列表。例如,如果该内容是“C:\Windows\Notepad.exe、-2”,则分隔符是一个逗号。你可以指定 NULL。

    PathHints

    特殊路径列表,由分号 (;) 分隔,此处该功能将寻找匹配当前内容的文件。例如,如果内容是 "Notepad.exe" 而路径是 %Path% 环境变量,该函数将会在 %windir% 中找到 Notepad.exe 并且返回 "c:\Windows [Notepad.exe]"。你可以指定 NULL。

    例如:

    <content filter="MigXmlHelper.ExtractSingleFile(',','%system%')">
    

    <content filter="MigXmlHelper.ExtractSingleFile(NULL,'%CSIDL_COMMON_FONTS%')">
    
  • ExtractMultipleFiles

    ExtractMultipleFiles 功能返回多种模式,每种模式对应于给定注册表值内容中存在的每个文件。如果注册表值为 MULTI-SZ,则在默认情况下,将 MULTI-SZ 分隔符视为分隔符。因此,对于 MULTI-SZ,<Separators> 参数必须是 NULL。

    返回模式是必须存在于源计算机上的文件的编码位置。如果该说明在注册表值中是正确的,但是该文件不存在,则生成的列表中将不会包含它。

    语法:ExtractMultipleFiles(Separators,PathHints)

    设置 是否为必需?

    分隔符

    可能在该注册表值名称中附加在文件说明的可能分隔符列表。例如,如果该内容是“C:\Windows\Notepad.exe、-2”,则分隔符是一个逗号。在处理 MULTI-SZ 注册表值时,该参数必须为 NULL。

    PathHints

    特殊路径列表,由分号 (;) 分隔,此处该功能将寻找匹配当前内容的文件。例如,如果内容是 "Notepad.exe" 而路径是 %Path% 环境变量,该函数将会在 %windir% 中找到 Notepad.exe 并且返回 "c:\Windows [Notepad.exe]"。你可以指定 NULL。

  • ExtractDirectory

    ExtractDirectory 功能返回一个模式,该模式是必须存在于源计算机上的目录的编码位置。如果在注册表值中该说明是正确的,但是该目录不存在,则该功能将返回 NULL。如果正在处理 MULTI-SZ 注册表值,则仅处理第一段。

    语法:ExtractDirectory(Separators,LevelsToTrim,PatternSuffix)

    设置 是否为必需?

    分隔符

    可能在该注册表值名称中附加在文件说明的可能分隔符列表。例如,如果该内容是“C:\Windows\Notepad.exe、-2”,则分隔符是一个逗号。在处理 MULTI-SZ 注册表值时,你必须指定 NULL。

    LevelsToTrim

    从目录说明末尾删除的级别数目。当你具有指向已知位置该根目录内部的注册表值时,使用该功能提取根目录。

    PatternSuffix

    将添加到目录说明的模式。例如,* [*]

    例如:

    <objectSet>
         <content filter='MigXmlHelper.ExtractDirectory (NULL, "1")'>
              <objectSet>
                   <pattern type="Registry">%HklmWowSoftware%\Classes\Software\RealNetworks\Preferences\DT_Common []</pattern>
              </objectSet>
         </content>
    </objectSet>
    

<contentModify>

在将其写入目标计算机之前,<contentModify> 元素可修改对象的内容。对于每个 <contentModify> 元素,都可能存在多个 <objectSet> 元素。该元素返回正在处理的对象的新内容。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <objectSet>

  • 帮助程序功能:可以和此元素一起使用 <contentModify> 功能:ConvertToDWORD、ConvertToString、ConvertToBinary、KeepExisting、OffsetValue、SetValueByTable、MergeMultiSzContent 和 MergeDelimitedContent。

语法:

<contentModify script="ScriptInvocation">

</contentModify>

设置 是否为必需?

脚本

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对包含规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

<contentModify> 功能

迁移对象时,下述功能会更改其内容。针对 <ObjectSet> 父元素正在枚举的每个对象调用这些功能。

  • ConvertToDWORD

    对于 <ObjectSet> 父元素枚举的注册表值内容,ConvertToDWORD 功能会将其转换为 DWORD。例如,ConvertToDWORD 会将字符串“1”转换为 DWORD 0x00000001。如果转换失败,则会应用 DefaultValueOnError 值。

    语法:ConvertToDWORD(DefaultValueOnError)

    设置 是否为必需?

    DefaultValueOnError

    在转换失败情况下写入值名称的值。你可以指定在转换失败情况下写入 NULL 或 0。

  • ConvertToString

    对于 <ObjectSet> 父元素枚举的注册表值内容,ConvertToDWORD 功能会将其转换为 DWORD。例如,ConvertToDWORD 会将 DWORD 0x00000001 转换为字符串“1”。如果转换失败,则会应用 DefaultValueOnError 值。

    语法:ConvertToString(DefaultValueOnError)

    设置 是否为必需?

    DefaultValueOnError

    在转换失败情况下写入值名称的值。你可以指定在转换失败情况下写入 NULL 或 0。

    例如:

    <contentModify script="MigXmlHelper.ConvertToString('1')">
         <objectSet>
              <pattern type="Registry">HKCU\Control Panel\Desktop [ScreenSaveUsePassword]</pattern>
         </objectSet>
    </contentModify>
    
  • ConvertToBinary

    对于 <ObjectSet> 父元素枚举的注册表值内容,ConvertToBinary 功能会将其转换为二进制类型。

    语法:ConvertToBinary ()

  • OffsetValue

    OffsetValue 函数会将 Value 加入到迁移对象,或将其从该对象中减去,然后将结果写回目标计算机上的注册表值。例如,如果迁移对象是 14 的 DWORD 值,且 Value 值为“-2”,则目标计算机上的注册表值应为 12。

    语法:OffsetValue(Value)

    设置 是否为必需?

    数值类型值的字符串表示。它可以是正数或复数。例如,OffsetValue(2)

  • SetValueByTable

    SetValueByTable 功能会将源计算机的值匹配到源表。如果该值已经在那里,则将应用目标表中的等价值。如果该值不在那里,或者目标表中没有等价值,则将应用 DefaultValueOnError

    语法:SetValueByTable(SourceTable,DestinationTable,DefaultValueOnError)

    设置 是否为必需?

    SourceTable

    源注册表值可能使用的值的列表,以逗号分隔。

    DestinationTable

    已转换值的列表,以逗号分隔。

    DefaultValueOnError

    在下述情况下,应用到目标计算机的值:1) 源计算机的值与 SourceTable 不匹配,或 2) DestinationTable 没有等价值。

    如果 DefaultValueOnError 为 NULL,则在目标计算机上不会更改该值。

  • KeepExisting

    当目标计算机存在冲突时,你可以使用 KeepExisting 功能。该功能可以保留(不是覆盖)目标计算机上对象的特定属性。

    语法:KeepExisting("OptionString","OptionString","OptionString",…)

    设置 是否为必需?

    OptionString

    OptionString 可以是 SecurityTimeFieldsFileAttrib:Letter。你在 OptionStrings 的每个类型中指定一个。不能指定使用同样的值指定多个 OptionStrings。如果你执行了该操作,则将保留该类型的最右边选项。例如,不能指定 (“FileAttrib:H”、“FileAttrib:R”),因为只能评估只读属性。相反,指定了 (“FileAttrib:HR”),则目标计算机上将保留隐藏和只读属性。

    • 安全。如果对象的安全描述符存在,则保留它。

    • TimeFields。保留目标对象的时间戳。该参数仅用于文件。

    • FileAttrib:Letter。针对文件属性的指定集保留目标对象的属性值(On 或 OFF)。该参数仅用于文件。下述内容区分大小写,但 USMT 会忽略无效值、重复值或在“FileAttrib:”之后有空格的值。你可以指定下述属性的任何组合。

      • A = Archive(存档)

      • C = Compressed(压缩)

      • E = Encrypted(加密)

      • H = Hidden(隐藏)

      • I = Not Content Indexed(无内容索引)

      • O = Offline(脱机)

      • R = Read-Only(只读)

      • S = System(系统)

      • T = Temporary(临时)

  • MergeMultiSzContent

    MergeMultiSzContent 功能会合并 <ObjectSet> 父元素枚举的注册表值的 MULTI-SZ 内容,该操作会使用目标计算机已经存在的等价注册表值的内容。Instruction String 会从 MULTI-SZ 中删除内容,或将内容添加到其中。将删除重复的元素。

    语法:MergeMultiSzContent (Instruction,String,Instruction,String,…)

    设置 是否为必需?

    指令

    可以是下列情况之一:

    • 添加。如果不存在相应的字符串,则将其添加到生成的 MULTI-SZ。

    • 删除。从 MULTI-SZ 中删除相应的字符串。

    字符串

    将添加或删除的字符串。

  • MergeDelimitedContent

    MergeDelimitedContent 功能会合并 <ObjectSet> 父元素枚举的注册表值的内容,该操作会使用目标计算机已经存在的等价注册表值的内容。将该内容视为元素列表,由限定符参数中的字符之一进行分隔。将删除重复的元素。

    语法:MergeDelimitedContent(Delimiters,Instruction,String,…)

    设置 是否为必需?

    限定符

    用于分隔正在处理的对象内容的单个字符。该内容将视为由限定符分隔的元素列表。

    例如,“.”将会按照句号分隔字符串。

    指令

    可以是下述操作之一:

    • 添加。如果该处尚不存在字符串,则将字符串添加到生成的 MULTI-SZ。

    • 删除。从 MULTI-SZ 中删除字符串

    字符串

    将添加或删除的字符串。

<description>

<description> 元素为组件定义了描述,但不会影响迁移。

  • **出现次数:**零次或一次

  • 父元素: <component>

  • **子元素:**无

语法:

<description>ComponentDescription</description>

设置 是否为必需?

ComponentDescription

组件的描述。

下述代码示例显示了 <description> 元素如何定义“我的自定义组件”描述:

<description>My custom component<description>

<destinationCleanup>

在将对象应用到源计算机之前,<destinationCleanup> 元素会从目标计算机删除对象(例如文件和注册表值)。只有在目标计算机上运行 LoadState 工具时才评估该元素。即 ScanState 工具将忽略该元素。

重要

使用该选项时应特别小心,因为它将从计算机上删除对象。

对于每个 <destinationCleanup> 元素,都可能存在多个 <objectSet> 元素。如果源计算机上出现遗失注册表项,但你要确保迁移组件,通常会使用该元素。在此情况下,你可以删除所有组件的注册表项,然后迁移源注册表项。这将确保如果源计算机上出现了遗失项,则在目标计算机上也会遗失。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 子元素: <objectSet>(请注意,目标计算机将会删除所有子元素。)

语法:

<destinationCleanup filter=ScriptInvocation>

</destinationCleanup>

设置 是否为必需?

筛选器

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对包含规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

例如:

<destinationCleanup>
   <objectSet>
      <pattern type="Registry">HKCU\Software\Lotus\123\99.0\DDE Preferences\* [*]</pattern>
      <pattern type="Registry">HKCU\Software\Lotus\123\99.0\Find Preferences\* [*]</pattern>
   </objectSet>
</destinationCleanup>

<detect>

虽然现在仍然支持 <detect> 元素,但我们不建议使用它,因为 USMT 的未来版本可能取消它。在此情况下,你必须重新编写你的脚本。建议你使用 <detection> 元素。

你可以使用 <detect> 元素确定系统中是否存在该组件。如果所有 <detect> 元素内部的 <detect> 子元素都解析为 TRUE,则 <detect> 元素解析为 TRUE。如果任何 <detect> 子元素解析为 FALSE,则其 <detect> 父元素都解析为 FALSE。如果不存在 <detect> 元素部分,则 USMT 将假设该组件存在。

对于每个 <detect> 元素,都可以存在多个 <condition> 或 <objectSet> 子元素,通过 OR 操作符进行逻辑连接。如果至少一个 <condition> 或 <objectSet> 元素评估为 TRUE,则 <detect> 元素评估为 TRUE。

  • **出现次数:**无限制

  • 父元素: <detects>、 <namedElements>

  • 必需子元素: <condition>

  • 可选子元素: <objectSet>

语法:

<detect name="ID" context="User|System|UserAndSystem">

</detect>

设置 是否为必需?

名称

是,当 <detect> 是 <namedElements> 的子元素时。

否,当 <detect> 是 <detects> 的子元素时。

指定了 ID 时,不会处理任何子元素。相反,将会处理带有与 <namedElements> 元素所声明的同样名称的任何其他 <detect> 元素。

上下文

(default = UserAndSystem)

定义该参数的范围:即是在特定用户的上下文中处理该组件,还是在整个操作系统中处理该组件,或者在两种情况下处理该组件。

由组件元素设置最大的可能范围。例如,如果 <component> 元素拥有用户的上下文并且 <rules> 元素拥有 UserAndSystem 的上下文,则 <rules> 元素会以假定拥有用户上下文的方式执行处理。如果 <rules> 元素拥有了系统的上下文,则它会按照不存在 <rules> 元素的情况进行工作。

  • User。 评估每位用户的变量。

  • System。 仅为系统评估一次变量。

  • UserAndSystem。 评估整个操作系统和每位用户的变量。

有关示例,请参阅 <detection> 示例。

<detects>

虽然现在仍然支持 <detects> 元素,但我们不建议使用它,因为 USMT 的未来版本可能取消它,这样可能要求你重写脚本。相反,我们建议,如果父元素是 <role> 或 <namedElements>,应使用 <detection> 元素,如果父元素是 <rules>,应使用 <conditions> 元素。使用 <detection> 让你可以更清晰地编写复杂的布尔语句。

<detects> 元素是一个或多个 <detect> 元素的容器。如果 <detects> 元素的所有 <detect> 子元素都解析为 TRUE,则 <detects> 将解析为 TRUE。如果任何 <detect> 子元素解析为 FALSE,则 <detects> 将解析为 FALSE。如果你不想编写组件的 <detects> 元素,则你可以在 <namedElements> 元素下创建 <detects> 元素,然后引用它。如果不存在 <detects> 元素部分,则 USMT 将假设该组件存在。每个 <detects> 元素的结果通过 OR 操作符连接到一起,形成用于检测父元素的规则。

语法:

<detects name="ID" context="User|System|UserAndSystem">

</detects>

  • **出现次数:**无限制。

  • 父元素: <role>、<rules> 和 <namedElements>

  • 必需子元素: <detect>

设置 是否为必需?

名称

是,当 <detects> 是 <namedElements> 的子元素时。

否,当 <detects> 是 <role> 或 <rules> 的子元素时。

指定了 ID 时,不会处理任何 <detect> 子元素。相反,将会处理与 <namedElements> 元素所声明的名称相同的任何其他 <detects> 元素。

上下文

(default = UserAndSystem)

定义该参数的范围:即是在特定用户的上下文中处理该组件,还是在整个操作系统中处理该组件,或者在两种情况下处理该组件。

<component> 元素可能设置的最大范围。例如,如果 <component> 元素拥有用户的上下文并且 <rules> 元素拥有 UserAndSystem 的上下文,则 <rules> 元素会以假定拥有用户上下文的方式执行处理。如果 <rules> 元素拥有了系统的上下文,则它会按照不存在 <rules> 元素的情况进行工作。

  • User。 评估每位用户的变量。

  • System。 仅为系统评估一次变量。

  • UserAndSystem。 评估整个操作系统和每位用户的变量。

对于 <rules> 元素的 <detects> 元素,将忽略上下文参数。

下述示例取自 MigApp.xml 文件。

<detects>
   <detect>
      <condition>MigXmlHelper.DoesFileVersionMatch("%Lotus123InstPath%\123w.exe","ProductVersion","9.*")</condition>
   </detect>
   <detect>
      <condition>MigXmlHelper.DoesFileVersionMatch("%SmartSuiteInstPath%\smartctr.exe","ProductVersion","99.*")</condition>
   </detect>
</detects>

<detection>

<detection> 元素是一个或多个 <conditions> 元素的容器。<condition> 子元素的结果位于 <conditions> 元素下面,它确定该元素的结果。例如,如果所有 <detection> 元素内部的 <conditions> 子元素都解析为 TRUE,则 <detection> 元素解析为 TRUE。如果任何 <conditions> 子元素解析为 FALSE,则 <detection> 将解析为 FALSE。

此外,对于 <role> 元素的 <detection> 部分的结果,将使用 OR 操作符连接到一起,形成父元素的检测规则。即如果 <detection> 部分之一解析为 TRUE,则会处理 <role> 元素。否则,将不会处理 <role> 元素。

如果不想将其写入组件内部,则使用 <namedElements> 元素下的 <detection> 元素。之后将匹配的 <detection> 部分纳入 <role> 元素,以控制是否迁移该组件。如果不存在针对组件的 <detection> 部分,则 USMT 将假设该组件存在。

  • **出现次数:**无限制。

  • 父元素: <role>、<namedElements>

  • 子元素: <conditions>

语法:

<detection name="ID" context="User|System|UserAndSystem">

</detection>

设置 是否为必需?

名称

  • 是,当在 <namedElements> 下声明 <detection> 时

  • 可选,当在 <role> 下进行声明时

如果进行了声明,则会忽略 <detection> 元素的内容,并将评估在 <namedElements> 元素中声明的同名 <detection> 元素的内容。

上下文

否,default = UserAndSystem

定义该参数的范围:即是在特定用户的上下文中处理该组件,还是在整个操作系统中处理该组件,或者在两种情况下处理该组件。

  • User。评估每位用户的组件。

  • System。仅为系统评估一次组件。

  • UserAndSystem。评估整个操作系统和每位用户的组件。

例如:

<detection name="AdobePhotoshopCS">
   <conditions>
      <condition>MigXmlHelper.DoesObjectExist("Registry","HKCU\Software\Adobe\Photoshop\8.0")</condition>
      <condition>MigXmlHelper.DoesFileVersionMatch("%PhotoshopSuite8Path%\Photoshop.exe","FileVersion","8.*")</condition>
   </conditions>
</detection>

<role role="Settings">
   <detection>
      <conditions>
         <condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 5.*")</condition>
         <condition>MigXmlHelper.DoesFileVersionMatch("%QuickTime5Exe%","ProductVersion","QuickTime 6.*")</condition>
      </conditions>
   </detection>

<displayName>

在每个 <component> 元素内部,<displayName> 元素都是必需字段。

  • **出现次数:**对于每个组件都是一次

  • 父元素: <component>

  • **子元素:**无

语法:

<displayName _locID="ID">ComponentName</displayName>

设置 是否为必需?

locID

该参数供内部 USMT 使用。不使用此参数。

ComponentName

组件名称。

例如:

<displayName>Command Prompt settings</displayName>

<environment>

<environment> 元素是 <variable> 元素的容器,在 <variable> 元素中你可以定义变量以使用 .xml 文件。按此方式定义的所有环境变量都是私有的。即它们仅用于它们的子组件和定义它们的组件。有关两个示例方案,请参阅示例。

  • **出现次数:**无限制

  • 父元素: <role>、<component> 和 <namedElements>

  • 必需子元素: <variable>

  • 可选子元素: <conditions>

语法:

<environment name="ID" context="User|System|UserAndSystem">

</environment>

设置 是否为必需?

名称

是,当 <environment> 是 <namedElements> 的子元素时

否,当 <environment> 是 <role> 或 <component> 的子元素时

按 <role> 或 <component> 元素的子元素进行声明时,如果声明了 ID,则 USMT 将忽略 <environment> 元素的内容以及与 <namedElements> 元素中声明的同名 <environment> 元素的内容。

上下文

(default = UserAndSystem)

定义该参数的范围:即是在特定用户的上下文中处理该组件,还是在整个操作系统中处理该组件,或者在两种情况下处理该组件。

由 <component> 元素设置最大的可能范围。例如,如果 <component> 元素拥有用户的上下文并且 <rules> 元素拥有 UserAndSystem 的上下文,则 <rules> 元素会以假定拥有用户上下文的方式执行处理。如果 <rules> 元素拥有了系统的上下文,则它会按照不存在 <rules> 的情况工作。

  • User。 评估每位用户的变量。

  • System。 仅为系统评估一次变量。

  • UserAndSystem。 评估整个操作系统和每位用户的变量。

示例方案 1

在此方案中,你可能要根据目标计算机的配置,在运行时生成对象的位置。例如,如果应用程序在安装目录写入数据,则你必须执行该操作,这样用户就可以将应用程序安装在计算机的任何地方。如果应用程序写入注册表值 hklm\software\companyname\install [path],然后使用应用程序的安装位置更新该值,则你正确迁移所需数据的唯一方法是定义环境变量。例如:

<environment>
   <variable name="INSTALLPATH">
      <script>MigXmlHelper.GetStringContent("Registry","\software\companyname\install [path]")</script>
   </variable>
</environment>

然后你可以按下述方式使用包含规则。你可以使用任何 <script> 功能执行类似任务。

<include>
   <objectSet>
      <pattern type="File">%INSTALLPATH%\ [*.xyz]</pattern>
   </objectSet>
</include>

你可以使用第二种方法:筛选包含所需数据的注册表值。下述示例提取了注册表值 Hklm\software\companyname\application\ [Path] 的第一个字符串(在分隔符“、”之前)。

<environment>
   <variable name="APPPATH">
        <objectSet>
           <content filter='MigXmlHelper.ExtractDirectory (",", "1")'>
             <objectSet>
                <pattern type="Registry">Hklm\software\companyname\application\ [Path]</pattern>
              </objectSet>
            </content>
        </objectSet>
    </variable>
</environment>

示例方案 2

在此方案中,你要从 %SYSTEMDRIVE%\data\userdata\dir1\dir2\ 迁移五个文件,名字为 File1.txt、File2.txt......以此类推。要执行该操作,你必须在 .xml 文件中设置 <include> 规则。

<include>
   <objectSet>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File1.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File2.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File3.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File4.txt]</pattern>
      <pattern type="File">%SYSTEMDRIVE%\data\userdata\dir1\dir2 [File5.txt]</pattern>
   </objectSet>
</include>

你可以按下述方法创建位置变量,而不必键入路径五次。

<environment>
   <variable name="DATAPATH">
      <text>%SYSTEMDRIVE%\data\userdata\dir1\dir2 </text>
      </variable>
</environment>

然后你可以按下述方式指定 <include> 规则中的变量。

<include>
   <objectSet>
      <pattern type="File">%DATAPATH% [File1.txt]</pattern>
      <pattern type="File">%DATAPATH% [File2.txt]</pattern>
      <pattern type="File">%DATAPATH% [File3.txt]</pattern>
      <pattern type="File">%DATAPATH% [File4.txt]</pattern>
      <pattern type="File">%DATAPATH% [File5.txt]</pattern>
   </objectSet>
</include>

<exclude>

除非有更具体 <include> 元素迁移对象,否则 <exclude> 元素会确定不迁移的具体对象。如果针对同一对象同时存在 <include> 和 <exclude> 元素,则将包含该对象。对于每个 <exclude> 元素,都可以存在多个 <objectSet> 子元素。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 子元素: <objectSet>

  • **帮助程序功能:**你可以利用该元素使用下述 <include> 和 <exclude> 筛选器功能:CompareStringContent、IgnoreIrrelevantLinks、AnswerNo、NeverRestore 和 SameRegContent。

语法:

<exclude filter="ScriptInvocation">

</exclude>

设置 是否为必需?

筛选器

(default = No)

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对包含规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

例如,从 MigUser.xml 文件中进行操作。

<exclude>
   <objectSet>
      <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
      <pattern type="File">%CSIDL_MYPICTURES%\* [*]</pattern>
      <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
   </objectSet>
</exclude>

<excludeAttributes>

你可以使用 <excludeAttributes> 元素确定与对象有关的迁移的具体参数。如果 <includeAttributes> 和 <excludeAttributes> 元素之间存在冲突,则最具体的模式将确定将不予迁移的模式。如果对象不带有 <includeAttributes> 或 <excludeAttributes> 元素,则将迁移其所有参数。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 子元素: <objectSet>

语法:

<excludeAttributes attributes="Security|TimeFields|Security、TimeFields">

</excludeAttributes>

参数 是否为必需?

属性

指定要排除的属性。可以指定下述项中的一个,也可以指定两项并用引号隔开,例如,"Security","TimeFields"

  • Security 可以取 Owner、Group、DACL 或 SACL 中的一个。

  • TimeFields 可以取 CreationTime、LastAccessTime 和 LastWrittenTime 中的一个。

示例:

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/miguser">
<!-- This component migrates My Video files -->
   <component type="System" context="System">
      <displayName>System Data</displayName>
         <role role="Data">
            <rules>
<!-- Include all of the text files, which are immediately in the drive where the operating system is installed -->
               <include>
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [*.txt]</pattern>
                  </objectSet>
               </include>
<!-- Exclude the time stamps from the text file starting with the letter a -->
               <excludeAttributes attributes="TimeFields">
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [a*.txt]</pattern>
                  </objectSet>
               </excludeAttributes>
<!-- include the time stamps from the text file aa.txt -->
               <includeAttributes attributes="TimeFields">
                  <objectSet>
                     <pattern type="File">%SYSTEMDRIVE%\ [aa.txt]</pattern>
                  </objectSet>
               </includeAttributes>
<!-- Logoff the user after loadstate successfully completed. -->
               <externalProcess when="post-apply">
                  <commandLine>
                     logoff
                  </commandLine>
               </externalProcess>
         </rules>
   </role>
<!-- Migrate 
   all doc files from the system
   all power point files
   all visio design files 
   all my c++ program files -->
   <extensions>
      <extension>DOC</extension>
      <extension>PPT</extension>
      <extension>VXD</extension>
      <extension>PST</extension>
      <extension>CPP</extension>
   </extensions>
</component>
</migration>

<extensions>

<extensions> 元素是一个或多个 <extension> 元素的容器。

  • **出现次数:**零次或一次

  • 父元素: <component>

  • 必需子元素: <extension>

语法:

<extensions>

</extensions>

<extension>

可以使用 <extension> 元素指定特定扩展名的文档。

  • **出现次数:**无限制

  • 父元素: <extensions>

  • **子元素:**无

语法:

<extension>FilenameExtension</extension>

设置 是否为必需?

FilenameExtension

文件扩展名

例如,如果要从源计算机迁移所有 *.doc 文件,则在 <component> 元素下指定下述代码:

<extensions> 
        <extension>doc</extension> 
<extensions> 

与在 <rules> 元素下指定下述代码的方式相同:

<include> 
        <objectSet> 
                <script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script> 
        </objectSet> 
</include>

有关如何使用 <extension> 元素的其他示例,请参阅 <excludeAttributes> 示例。

<externalProcess>

可以使用 <externalProcess> 元素在迁移过程中运行命令行。例如,你可能想在 LoadState 过程结束后运行一个命令。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <commandLine>

语法:

<externalProcess when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</externalProcess>

设置 是否为必需?

何时

指示运行命令行的时间。该值可以为以下值之一:

  • pre-scan 在扫描过程开始前。

  • scan-success 在扫描过程成功结束后。

  • post-scan 在扫描过程结束后,无论成功与否。

  • pre-apply 在应用过程开始前。

  • apply-success 在应用过程成功结束后。

  • post-apply 在应用过程结束后,无论成功与否。

有关如何使用 <externalProcess> 元素的示例,请参阅 <excludeAttributes> 示例。

<icon>

这是内部 USMT 元素。不要使用此元素。

<include>

<include> 元素确定迁移的内容,除非存在更具体的 <exclude> 规则。可以指定更加具体的脚本,以扩展要收集内容的定义。对于每个 <include> 元素,都可能存在多个 <objectSet> 元素。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <objectSet>

  • **帮助程序功能:**你可以通过此元素使用下述 <include> 和 <exclude> 筛选器功能:CompareStringContent、IgnoreIrrelevantLinks、AnswerNo 和 NeverRestore。

语法:

<include filter="ScriptInvocation">

</include>

设置 是否为必需?

筛选器

不可以。

如果未指定此参数,则将处理 <ObjectSet> 子元素内部的所有模式。

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对 <include> 规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

下述示例取自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.myvideo">My Video</displayName>
      <paths>
         <path type="File">%CSIDL_MYVIDEO%</path>
      </paths>
      <role role="Data">
         <detects>           
            <detect>
               <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%")</condition>
            </detect>
         </detects>
         <rules>
               <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>                  <objectSet>                     <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>                  </objectSet>               </include>
               <merge script="MigXmlHelper.DestinationPriority()">
                  <objectSet>
                     <pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
                  </objectSet>
            </merge>
         </rules>
      </role>
    </component>

<include> 和 <exclude> 筛选器功能

下述功能返回布尔值。你可以使用它们以按照符合条件的时间迁移特定对象。

  • AnswerNo

    该筛选器始终返回 FALSE。

    语法:AnswerNo ()

  • CompareStringContent

    语法:CompareStringContent("StringContent","CompareType")

    设置 是否为必需?

    StringContent

    针对其进行检查的字符串。

    CompareType

    一个字符串。使用下列值之一:

    • 等于(区分大小写)。对于迁移引擎处理的当前对象,如果其字符串表示与 StringContent 相同,则此函数返回 TRUE。

    • NULL或其他任何值。对于迁移引擎处理的当前对象,如果其字符串表示与 StringContent 不匹配,则此函数返回 TRUE。

  • IgnoreIrrelevantLinks

    该筛选器屏蔽了指向目标计算机上不可用的对象的 .lnk 文件。请注意,该屏幕发生在目标计算机上,因此在 ScanState 工作期间,会将所有 .lnk 文件保存到存储。之后,在运行 LoadState 工具时,将屏蔽它们。

    语法:IgnoreIrrelevantLinks ()

    例如:

    <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
              <pattern type="File">%CSIDL_COMMON_VIDEO%\* [*]</pattern>
         </objectSet>
    </include>
    
  • NeverRestore

    可以使用该函数从源计算机收集指定的对象,但之后不会将这些对象迁移到目标计算机。当与 ScanState 工具一起运行时,该功能会评估为 TRUE。当与 LoadState 工具一起运行时,该功能会评估为 FALSE。当你要在目标计算机上检查对象值但不打算将该对象迁移到目标计算机时,可以考虑使用该功能。

    语法:NeverRestore()

    在下述示例中,会将 HKCU\Control Panel\International [Locale] 包含到存储中,但不会将其迁移到目标计算机。

    <include filter="MigXmlHelper.NeverRestore()">
       <objectSet>
          <pattern type="Registry">HKCU\Control Panel\International [Locale]</pattern>
       </objectSet>
    </include>
    

<includeAttributes>

你可以使用 <includeAttributes> 元素确定是否在迁移对象本身时一起迁移与该对象关联的特定参数。如果 <includeAttributes> 和 <excludeAttributes> 元素之间存在冲突,则最具体的模式将确定要迁移的具体参数。如果对象不带有 <includeAttributes> 或 <excludeAttributes> 元素,则将迁移其所有参数。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 子元素: <objectSet>

语法:

<includeAttributes attributes="Security|TimeFields|Security、TimeFields">

</includeAttributes>

设置 是否为必需?

属性

指定将通过已迁移对象包含的属性。可以指定下述项中的一个,也可以指定两项并用引号隔开,例如,"Security","TimeFields"

  • 安全可以是下列值之一:

    • 所有者。对象的所有者 (SID)。

    • 组。对象的主要分组 (SID)。

    • DACL(判別式访问控制列表)。判別式存取控制表由对象的所有者控制,指定了特定用户或组对于对象的访问权。

    • SACL(系统访问控制列表)。ACL 控制对于尝试访问安全对象的审查消息的生成。获取或设置对象的 SACL 能力受权限控制,通常情况下,仅系统管理员具有该权限。

  • TimeFields 可以是下列内容之一:

    • CreationTime。指定创建文件或目录的时间。

    • LastAccessTime。指定最后一次读取、写入或(在可执行文件情况下)运行文件的时间。

    • LastWrittenTime。指定最后一次写入、截断或覆盖文件的时间。

有关如何使用 <includeAttributes> 元素的示例,请参阅 <excludeAttributes> 示例。

<library>

这是内部 USMT 元素。不要使用此元素。

<location>

<location> 元素定义了 <object> 元素的位置。

  • **出现次数:**对于每个 <object> 都是一次

  • 父元素: <object>

  • 子元素: <script>

语法:

<location type="typeID">ObjectLocation</location>

设置 是否为必需?

类型

typeID 可以是注册表或文件。

ObjectLocation

对象的位置。

下述示例取自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
   </object>
</addObjects>

<locationModify>

在将对象迁移到目标计算机之前,可以使用 <locationModify> 元素更改它的位置和名称。只有在目标计算机上运行 LoadState 工具时才处理 <locationModify> 元素。换言之,ScanState 工具将忽略该元素。如果不存在相应文件夹,则 <locationModify> 元素会在目标计算机上创建它。

**出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <objectSet>

  • **帮助程序功能:**你可以通过该元素使用下述 <locationModify> 功能:ExactMove、RelativeMove 和 Move。

语法:

<locationModify script="ScriptInvocation">

</locationModify>

设置 是否为必需?

脚本

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对包含规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

下述示例取自 MigApp.xml 文件:

<locationModify script="MigXmlHelper.RelativeMove('%CSIDL_APPDATA%\Microsoft\Office','%CSIDL_APPDATA%')">
   <objectSet>
      <pattern type="File">%CSIDL_APPDATA%\Microsoft\Office\ [Access10.pip]</pattern>
   </objectSet>
</locationModify>

<locationModify> 功能

在使用 <locationModify> 元素迁移对象时,下述功能会更改他们的位置。针对 <ObjectSet> 父元素正在枚举的每个对象调用这些功能。如果不存在相应文件夹,则 <locationModify> 元素会在目标计算机上创建它。

  • ExactMove

    对于 <ObjectSet> 父元素进行匹配的所有对象,ExactMove 函数会将其迁移到给定的 ObjectEncodedLocation 中。当你要将单个文件转移到目标计算机上的不同位置时,可以使用此功能。如果目标位置是节点,则会将所有匹配的源对象写入该节点,但不包括子目录。如果目标位置是叶,则迁移引擎会将所有匹配的源对象迁移到同一位置。如果出现冲突,则会应用常规冲突算法。

    语法:ExactMove(ObjectEncodedLocation)

    设置 是否为必需?

    ObjectEncodedLocation

    所有源对象的目标指定位置。

    例如:

    <locationModify script="MigXmlHelper.ExactMove('HKCU\Keyboard Layout\Toggle [HotKey]')">
         <objectSet>
              <pattern type="Registry">HKCU\Keyboard Layout\Toggle []</pattern>
         </objectSet>
    </locationModify>
    
  • 移动

    移动功能将对象转移到目标计算机上的不同位置。此外,该功能还会在源对象名称中最长的 CSIDL 上面创建子目录。

    语法:Move(DestinationRoot)

    设置 是否为必需?

    DestinationRoot

    源对象的迁移位置。如有需要,该功能还会在源对象名称中最长的 CSIDL 上面创建任何子目录。

  • RelativeMove

    可以使用 RelativeMove 功能收集和迁移数据。请注意,可以在源和目标的根下使用环境变量,但可以在源和目标计算机中对它们进行不同定义。

    语法:RelativeMove(SourceRoot,DestinationRoot)

    设置 是否为必需?

    SourceRoot

    迁移对象的来源位置。对于不处于此位置的 <ObjectSet> 父元素,将不会迁移它枚举的任何源对象。

    DestinationRoot

    源对象将迁移到目标计算机的位置。如有需要,该函数还会在 SourceRoot 上面创建任何子目录。

    例如:

    <include>
       <objectSet>
          <pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
       <objectSet>
    </include>
    <locationModify script="MigXmlHelper.RelativeMove('%CSIDL_COMMON_FAVORITES%','%CSIDL_COMMON_FAVORITES%')">
         <objectSet>
              <pattern type="File">%CSIDL_COMMON_FAVORITES%\* [*]</pattern>
         </objectSet>
    </locationModify>
    

<_locDefinition>

这是内部 USMT 元素。不要使用此元素。

<manufacturer>

<manufacturer> 元素定义了组件的制造商,但不会影响迁移。

  • **出现次数:**零次或一次

  • 父元素: <component>

  • **子元素:**无

语法:

<manufacturer>名称</manufacturer>

设置 是否为必需?

名称

组件制造商的名称。

<merge>

<merge> 元素确定发生冲突时会发生的事情。当迁移对象已经存在于目标计算机时,就会出现冲突。如果不指定该元素,则注册表的默认行为是让源对象覆盖目标对象。文件的默认行为是将源文件改为“OriginalFileName(1).OriginalExtension”。该元素仅指定发生冲突时应处理的事项。它不包括对象。因此,对于要迁移的对象,必须指定 <include> 规则以及 <merge> 元素。处理对象和检测到冲突时,USMT 会选择最具体的合并规则并将其应用到解析冲突。例如,如果你具有设置为 <sourcePriority> 的 <merge> 规则 C:\* [*] 以及设置为 <destinationPriority> 的 <merge> 规则 C:\subfolder\* [*],则 USMT 会使用 <destinationPriority> 规则,因为它更加具体。

有关此元素的示例,请参阅当目标计算机存在冲突时,<merge> 将如何工作?

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <objectSet>

  • **帮助程序功能:**可以和此元素一起使用下述 <merge> 功能:SourcePriority、DestinationPriority、FindFilePlaceByPattern、LeafPattern、NewestVersion、HigherValue() 和 LowerValue()。

语法:

<merge script="ScriptInvocation">

</merge>

设置 是否为必需?

脚本

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对 <include> 规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

下述示例取自 MigUser.xml 文件:

<rules>
   <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
      <objectSet>
         <pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>
      </objectSet>
   </include>
   <merge script="MigXmlHelper.DestinationPriority()">
      <objectSet>
         <pattern type="File">%CSIDL_MYVIDEO% [desktop.ini]</pattern>
      </objectSet>
   </merge>
</rules>

<merge> 功能

这些功能控制如何解析冲突。

  • DestinationPriority

    指定保留目标计算机上的对象,并且不会从源计算机迁移该对象。

    例如:

    <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.0\PhotoDraw\ [MyPictures]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.0\PhotoDraw\Settings\ [PicturesPath]</pattern>
              <pattern type="Registry">HKCU\Software\Microsoft\Office\9.0\PhotoDraw\Settings\ [AdditionalPlugInPath]</pattern>
         </objectSet>
    </merge>
    
  • FindFilePlaceByPattern

    发生冲突时,FindFilePlaceByPattern 功能会保存带有递增计数的文件。该字符串包含各种构造(<F>、<E>、<N>,按任意顺序)中一个。

    语法:FindFilePlaceByPattern(FilePattern)

    设置 是否为必需?

    FilePattern

    • <F> 将被原始文件名替换。

    • <N> 将被递增计数替换,直到目标计算机上没有对象冲突为止。

    • <E> 将被原始文件扩展名替换。

    例如,<F> (<N>).<E> 会将源文件 MyDocument.doc 改为目标计算机上的 MyDocument (1).doc。

  • NewestVersion

    NewestVersion 将按照文件版本解析目标计算机上的冲突。

    语法:NewestVersion(VersionTag)

    设置 是否为必需?

    VersionTag

    将检查版本字段。它可能是“FileVersion”或“ProductVersion”。带有最高 VersionTag 版本的文件将确定将按照文件版本解析的具体冲突。例如,如果 Myfile.txt 包含 FileVersion 1 而目标计算机上的同一文件包含 FileVersion 2,则将保留目标计算机上的文件。

  • HigherValue()

    可以将该功能用于合并注册表值。将按数值估算注册表值,而带有更高值的值将确定要合并的具体注册表值。

  • LowerValue()

    可以将该功能用于合并注册表值。将按数值估算注册表值,而带有更低值的值将确定要合并的具体注册表值。

  • SourcePriority

    指定迁移来自源计算机的对象,并删除目标计算机上的对象。

    例如:

    <merge script="MigXmlHelper.SourcePriority()">
     <objectSet>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\11.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
       <pattern type="Registry">%HklmWowSoftware%\Microsoft\Office\10.0\Common\Migration\Publisher [UpgradeVersion]</pattern>
     </objectSet>
    </merge>
    

<migration>

<migration> 元素是迁移 .xml 文件的单一根元素,它是必需的。每个 .xml 文件必须具有唯一的迁移 urlid。在命令行上为每个文件指定 urlid,它必须是唯一的。其原因在于 USMT 使用 urlid 定义文件中的组件。例如,你必须在每个文件的开头指定下述内容:<CustomFileName> 是文件名,例如,“CustomApp”。

  • **出现次数:**一次

  • **父元素:**无

  • 必需子元素: <component>

  • 可选子元素: <library>、<namedElements>

语法:

<migration urlid="*UrlID/*Name">

</migration>

设置 是否为必需?

urlid

UrlID 是对该 .xml 文件进行唯一识别的字符串识别符。按照 XML 命名空间规范的定义,该参数必须是不带分号的名称。每个迁移 .xml 文件必须具有唯一 urlid。如果两个迁移 .xml 文件具有相同的 urlid,则将不会处理在命令行上指定的第二个 .xml 文件。有关 XML 命名空间的详细信息,请参阅使用 XML 命名空间

名称

虽然不是必需的,但使用 .xml 文件的名称仍是最佳实践。

下述示例取自 MigApp.xml 文件:

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/migapp">
</migration>

MigXMLHelper.FileProperties

可使用该筛选器帮助程序功能按照文件大小和日期属性筛选迁移的文件。

帮助程序功能 MigXMLHelper.FileProperties(属性、运算符 和 valueToCompare)

属性

filesize、dateCreated、dateModified 和 dateAccessed

运算符

range、neq、lte、lt、eq、gte 和 gt

valueToCompare

正在比较的值。例如:

日期:“2008/05/15-2005/05/17”、“2008/05/15”

大小:结尾带有 B、KB、MB 或 GB 的数值。 “5GB”、“1KB-1MB”

<component context="System"  type="Application">
<displayName>File_size</displayName>
<role role="Data">

   <rules>
        <include filter='MigXmlHelper.FileProperties("dateAccessed","range","2008/05/15-2008/05/17")'>
         <objectSet>
         <pattern type="File">%SYSTEMDRIVE%\DOCS\* [*]</pattern>
         </objectSet>
      </include>
   </rules>
</role>
</component>

<namedElements>

可以使用 <namedElements> 元素定义已命名的元素。可在整个 .xml 文件的任何组件中使用这些元素。有关如何使用该元素的示例,请参阅 MigApp.xml 文件。

语法:

<namedElements>

</namedElements>

  • **出现次数:**无限制

  • 父元素: <migration>

  • 子元素: <environment>、<rules>、<conditions>、<detection>、<detects> 和 <detect>

有关元素示例,请参阅 MigApp.xml 文件。

<object>

<object> 元素代表文件或注册表项。

  • **出现次数:**无限制

  • 父元素: <addObjects>

  • 必需子元素: <location>、<attributes>

  • 可选子元素: <bytes>

语法:

<object>

</object>

下述示例取自 MigApp.xml 文件:

<addObjects>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [UpgradeVersion]</location>
      <attributes>DWORD</attributes>
      <bytes>0B000000</bytes>
   </object>
   <object>
      <location type="Registry">%HklmWowSoftware%\Microsoft\Office\12.0\Common\Migration\Office [Lang]</location>
      <attributes>DWORD</attributes>
      <bytes>00000000</bytes>
      </object>
</addObjects>

<objectSet>

<objectSet> 元素包含对象模式列表,例如,文件路径、注册表位置等。将首先评估任何 <conditions> 子元素。如果所有 <conditions> 元素都返回 FALSE,则将 <objectSet> 元素评估为空集。对于每个父元素,可能仅存在多个 <objectSet> 元素。

  • **出现次数:**无限制

  • 父元素: <variable>、 <content>、 <include>、 <exclude>、 <merge>、 <contentModify>、 <locationModify>、 <destinationCleanup>、 <includeAttributes>、 <excludeAttributes>、 <unconditionalExclude> 和 <detect>

  • 必需子元素: <script> 或 <pattern>

  • 可选子元素: <content>、<conditions> 和 <condition>

语法:

<objectSet>

</objectSet>

下述示例取自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.mymusic">My Music</displayName>
      <paths>
         <path type="File">%CSIDL_MYMUSIC%</path>
      </paths>
   <role role="Data">
      <detects>           
      <detect>
         <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
      </detect>
   </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>            <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>            <pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<path>

这是内部 USMT 元素。不要使用此元素。

<paths>

这是内部 USMT 元素。不要使用此元素。

<pattern>

可以使用此元素指定多个对象。可以为每个 <objectSet> 元素指定 <pattern> 元素,并合并它们。如果正在指定文件,则可能要使用带有 <script> 的 GenerateDrivePatterns。GenerateDrivePatterns 基本上与 <pattern> 规则相同,只是没有驱动器字符说明。例如,下面两行代码是类似的:

<pattern type="File">C:\Folder\* [Sample.doc]</pattern>
<script>MigXmlHelper.GenerateDrivePatterns("\Folder\* [Sample.doc]","Fixed"</script>
  • **出现次数:**无限制

  • 父元素: <objectSet>

  • **子元素:**无,但 Path [object 必须有效。

语法:

<pattern type="typeID">Path [object]</pattern>

设置 是否为必需?

类型

typeID 可以是注册表、文件或 Ini。如果 typeId 是 Ini,则在 Pathobject 之间不能有空格。例如,当 type="Ini" 时,下述内容是正确的:

<pattern type="Ini">%WinAmp5InstPath%\Winamp.ini|WinAmp[keeponscreen]</pattern>

Path [object]

对于有效的注册表或文件路径模式,后面应带有至少一个空格,再后面是包含将迁移对象的括号 []。

  • Path 可以包含星号 (*) 通配符,也可以是环境变量。不能将问号作为通配符使用。可以使用 HKCU 和 HKLM 分别引用 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE。

  • Object 可以包含星号 (*) 通配符。但是,不能将问号作为通配符使用。例如:

    C:\Folder\ [*] 枚举 C:\Path 中的所有文件,但不包括 C:\Folder 的子文件夹。

    C:\Folder\* [*] 枚举所有文件以及 C:\Folder 的子文件夹。

    C:\Folder\ [*.mp3] 枚举 C:\Folder 中的所有 .mp3 文件。

    C:\Folder\ [Sample.doc] 仅枚举位于 C:\Folder 中的 Sample.doc 文件。

    note备注
    如果正在迁移文件名中带有方括号符号([ 或 ])的文件,则你必须直接插入脱字 (^) 符号,然后对应它的括号就会生效。例如,如果存在名为“file].txt”的文件,则你必须指定 <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> 而不是 <pattern type="File">c:\documents\mydocs [file].txt]</pattern>

例如:

  • 迁移单一注册表项:

    <pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent]</pattern>
    
  • 从 C: 驱动器迁移 EngineeringDrafts 文件夹和任何子文件夹:

    <pattern type="File">C:\EngineeringDrafts\* [*]</pattern>
    
  • 从 C: 驱动器仅迁移 EngineeringDrafts 文件夹并排除任何子文件夹:

    <pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
    
  • 从 C:\EngineeringDrafts 迁移 Sample.doc 文件:

    <pattern type="File"> C:\EngineeringDrafts\ [Sample.doc]</pattern>
    
  • 要从 C: 驱动器中存在 Sample.doc 文件的任何位置迁移它,请按下述方式使用模式。如果 C: 驱动器中存在多个同名文件,则将迁移所有这些文件。

    <pattern type="File"> C:\* [Sample.doc] </pattern>
    
  • 有关如何使用此元素的更多示例,请参阅排除文件和设置重新路由文件和设置包含文件和设置自定义 XML 示例

<processing>

可以使用此元素在迁移过程的特定时点运行脚本。不应从指定的脚本产生返回值,如果出现返回值就会被忽略。

  • **出现次数:**无限制

  • 父元素: <rules>

  • 必需子元素: <script>

语法:

<processing when="pre-scan|scan-success|post-scan|pre-apply|apply-success|post-apply">

</processing>

设置 是否为必需?

何时

指示应运行脚本的时间。该值可以为以下值之一:

  • pre-scan 意味着在扫描过程开始前

  • scan-success 意味着在扫描过程成功结束后。

  • post-scan 意味着在扫描过程结束后,无论成功与否。

  • pre-apply 意味着在应用过程开始前。

  • apply-success 意味着在应用过程成功结束后。

  • post-apply 意味着在应用过程结束后,无论成功与否。

<plugin>

这是内部 USMT 元素。不要使用此元素。

<role>

<role> 是自定义 .xml 文件的必要元素。通过指定 <role> 元素,你可以创建具体的组件。该组件将由在 <component> 级别指定的参数所定义,并带有在此指定的角色。

  • **出现次数:**每个 <component> 可以带有一个、两个或三个 <role> 子元素。

  • 父元素: <component>、<role>

  • 必需子元素: <rules>

  • 可选子元素: <environment>、<detection>、<component>、<role>、<detects> 和 <plugin>

语法:

<role role="Container|Binaries|Settings|Data">

</role>

设置 是否为必需?

角色

定义组件角色。角色可以是下述项之一:

  • 容器

  • 二进制

  • 设置

  • 数据

你还可以:

  1. 最多在 <component> 内部指定三个 <role> 元素:一个“二进制”角色元素、一个“设置”角色元素和一个“数据”角色元素。这些参数不能更改迁移行为,唯一的目的是帮助你对迁移的设置进行分类。可以嵌套 <role> 元素,但每个嵌套元素带有相同的角色参数。

  2. 在 <component> 元素内部指定“容器”<role> 元素。在此情况下,你不能指定任何 <rules> 子元素,仅可以指定其他 <component> 元素。每个 <component> 子元素的类型必须与 <component> 父元素中的类型相同。例如:

<component context="UserAndSystem" type="Application">
  <displayName _locID="migapp.msoffice2003">Microsoft Office 2003</displayName> 
  <environment name="GlobalEnv" /> 
  <role role="Container">
    <detection name="AnyOffice2003Version" /> 
    <detection name="FrontPage2003" /> 
    <!-- 
 Office 2003 Common Settings 
  --> 
    <component context="UserAndSystem" type="Application">

下述示例取自 MigUser.xml 文件:有关更多示例,请参阅 MigApp.xml 文件。

<component type="System" context="User">
   <displayName _locID="miguser.startmenu">Start Menu</displayName>
   <paths>
      <path type="File">%CSIDL_STARTMENU%</path>
   </paths>
   <role role="Settings">
      <detects>           
         <detect>
            <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_STARTMENU%")</condition>
         </detect>
      </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
            <pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
            <pattern type="File">%CSIDL_STARTMENU% [desktop.ini]</pattern>
            <pattern type="File">%CSIDL_STARTMENU%\* [*]</pattern>
         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<rules>

<rules> 是自定义 .xml 文件的必要元素。如果选中的 <component> 父元素,则除非 <conditions> 子元素(如果存在)评估为 FALSE,否则该元素所含规则将在迁移期间运行。rules对于每个 <rules> 元素,都可以存在多个 <rules> 子元素。

  • **出现次数:**无限制

  • 父元素: <role>、<rules> 和 <namedElements>

  • 必需子元素: <include>

  • 可选子元素: <rules>、 <exclude>、 <unconditionalExclude>、<merge>、 <contentModify>、 <locationModify>、 <destinationCleanup>、 <addObjects>、 <externalProcess>、 <processing>、 <includeAttributes>、 <excludeAttributes>、 <conditions> 和 <detects>

语法:

<rules name="ID" context="User|System|UserAndSystem">

</rules>

设置 是否为必需?

名称

是,当 <rules> 是 <namedElements> 的子元素时

否,当 <rules> 是任何其他元素的子元素时

指定了 ID 时,不会处理任何子元素。相反,将会处理带有与 <namedElements> 中所声明的任何其他同名 <rules> 元素。

上下文

(default = UserAndSystem)

定义该参数的范围:即是在特定用户的上下文中处理该组件,还是在整个操作系统中处理该组件,或者在两种情况下处理该组件。

由组件元素设置最大的可能范围。例如,如果 <component> 元素拥有用户的上下文并且 <rules> 元素拥有 UserAndSystem 的上下文,则 <rules> 元素会以假定拥有用户上下文的方式执行处理。如果 <rules> 拥有系统的上下文,则以假定不存在 <rules> 的方式进行工作。

  • User。 评估每位用户的变量。

  • System。 仅为系统评估一次变量。

  • UserAndSystem。 评估整个操作系统和每位用户的变量。

下述示例取自 MigUser.xml 文件:

<component type="Documents" context="User">
   <displayName _locID="miguser.mymusic">My Music</displayName>
      <paths>
         <path type="File">%CSIDL_MYMUSIC%</path>
      </paths>
   <role role="Data">
      <detects>           
      <detect>
         <condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%")</condition>
      </detect>
   </detects>           
   <rules>
      <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\* [*]</pattern>
         </objectSet>
      </include>
      <merge script="MigXmlHelper.DestinationPriority()">
         <objectSet>
            <pattern type="File">%CSIDL_MYMUSIC%\ [desktop.ini]</pattern>
         </objectSet>
      </merge>
   </rules>
   </role>
</component>

<script>

<script> 所要求的返回值取决于父元素。

**出现次数:**对于 <variable> 是一次,对于 <objectSet> 和 <processing> 无限制

父元素: <objectSet>、<variable> 和 <processing>

**子元素:**无

语法和帮助程序功能:

  • 一般语法:<script>ScriptWithArguments</script>

  • 当 <script> 处于 <variable> 内部时,可以使用 <script> 功能。

    语法:<script>MigXmlHelper.GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")</script>

    示例: <script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>

  • 当 <script> 处于 <objectSet> 内部时,可以使用 <script> 功能。

    语法:<script>MigXmlHelper.GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")</script>

    示例: <script>MigXmlHelper.GenerateUserPatterns ("File","%USERPROFILE%\* [*.doc]", "FALSE")</script>

  • 当 <script> 处于 <objectSet> 内部时,可以使用 <script> 功能。

    语法:<script>MigXmlHelper.GenerateDrivePatterns("PatternSegment","DriveType")</script>

    示例: <script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>

  • 可以使用带有 <processing> 元素内部的 <script> 元素的<script> 功能AskForLogoff、ConvertToShortFileName、KillExplorer、RemoveEmptyDirectories、RestartExplorer、RegisterFonts、StartService、StopService 和 SyncSCM。

    语法:<script>MigXmlHelper.ExecutingScript</script>

    示例: <script>MigXmlHelper.KillExplorer()</script>

设置 是否为必需?

ScriptWithArguments

脚本后面可附加任何数目的字符串参数,以逗号分隔并括在括号中。例如, MyScripts.AScript ("Arg1","Arg2").

针对 <include> 规则中的对象集所枚举的每个对象调用该脚本。筛选器脚本返回一个布尔值。如果返回 TRUE,则迁移该对象。如果该值为 FALSE,则不会迁移它。

<script> 所要求的返回值取决于父元素。

  • 在 <variable> 内使用时,返回值必须为字符串。

  • 在 <objectSet> 内使用时,返回值必须是二维字符串数组。

  • 在 <location> 内使用时,返回值必须是与 <location> 类型属性相匹配的有效位置。例如,如果 <location type="File">,则脚本子元素(如果指定)必须是有效的文件位置。

    note备注
    如果正在迁移文件名中带有括号符号([ 或 ])的文件,则应直接插入脱字 (^) 符号,然后对应它的括号就会生效。例如,如果存在名为“file].txt”的文件,则应指定 <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> 而不是 <pattern type="File">c:\documents\mydocs [file].txt]</pattern>

示例:

要从源计算机任何驱动器迁移 Sample.doc 文件,请按下述方式使用 <script>。如果存在多个同名文件,则将迁移所有这些文件。

<script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script> 

有关如何使用此元素的更多示例,请参阅排除文件和设置重新路由文件和设置重新路由文件和设置自定义 XML 示例

<script> 功能

你可以使用带有 <script> 元素的下述功能

  • 字符串和模式生成功能

  • 简单执行脚本

字符串和模式生成功能

这些功能会返回字符串或模式。

  • GetStringContent

    可以使用带有 <script> 功能的 GetStringContent,该元素位于 <variable> 元素内。在可能情况下,该功能会返回给定目标的字符串表示。否则,返回 NULL。对于文件对象,该功能始终返回 NULL。

    语法:GetStringContent("ObjectType","EncodedLocationPattern", "ExpandContent")

    设置 是否为必需?

    ObjectType

    对象类型。可以是注册表或 Ini(针对 .ini 文件)。

    EncodedLocationPattern

    • 如果对象类型是注册表,则 EncodedLocationPattern 必须是有效的注册表路径。例如,HKLM\SOFTWARE\MyKey[]。

    • 如果对象类型是 Ini,则 EncodedLocationPattern 必须采用下述格式:

      IniFilePath|SectionName[SettingName]

    ExpandContent

    否 (default=TRUE)

    可以是 TRUE 或 FALSE。如果为 FALSE,则返回它之前不能展开给定的位置。

    例如:

    <variable name="MSNMessengerInstPath">
    <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\MSNMessenger [InstallationDirectory]")</script>
    </variable>
    
  • GenerateDrivePatterns

    GenerateDrivePatterns 函数将重复访问所有可用的驱动器,并选择与要求驱动器类型匹配的驱动器。然后,它会将选中的驱动器与 PatternSegment 末端相连接,形成完整的编码文件模式。例如,如果 PatternSegmentPath [file.txt] 而 DriveType 是 Fixed,则该函数将生成 C:\Path [file.txt] 和其他模式(如果存在 C: 之外的固定驱动器)。可以使用此功能指定环境变量。可以使用带有 <script> 元素的 GenerateDrivePatterns,该元素位于 <objectSet> 元素内,而后者位于 <include>/<exclude> 中。

    语法:GenerateDrivePatterns("PatternSegment","DriveType")

    设置 是否为必需?

    PatternSegment

    编码模式的后缀。它将会与一个驱动器规格相连,例如 "c:\",以形成一个完整的指定位置。例如,“* [*.doc]”。PatternSegment 不能是环境变量。

    DriveType

    为其生成模式的驱动器类型。可以指定下述值之一:

    • 固定

    • 光盘驱动器

    • 可移除

    • 远程

    有关该元素的示例,请参阅 MigUser.xml 文件中的最后一个组件。

  • GenerateUserPatterns

    该功能将重复访问正在迁移的所有用户,如果 <ProcessCurrentUser> 为 FALSE,则会排除当前已处理的用户,它还会展开每个用户的上下文中的指定模式。例如,如果用户 A、B 和 C 在 C:\Documents and Settings 都有配置文件,则通过调用 GenerateUserPattens('File','%userprofile% [*.doc]','TRUE'),帮助程序功能将生成下述三个模式:

    • “C:\Documents and Settings\A\* [*.doc]”

    • “C:\Documents and Settings\B\* [*.doc]”

    • “C:\Documents and Settings\C\* [*.doc]”

    语法:GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")

    设置 是否为必需?

    ObjectType

    定义第一个对象的类型。可以是文件或注册表。

    EncodedLocationPattern

    指定位置允许使用的环境变量。

    ProcessCurrentUser

    可以是 TRUE 或 FALSE。标明是否应为当前用户生成模式。

    示例:

    如果调用了 GenerateUserPattens('File'、'%userprofile% [*.doc]' 和 'FALSE'),同时 USMT 正在处理用户 A,则该功能将仅为用户 B 和 C 生成模式。可以使用帮助程序功能构建复杂的规则。例如,要从源计算机迁移 .doc 文件,但如果不迁移用户 X,则不会迁移来自用户 X 的配置文件的任何 .doc 文件。

    下面是此方案的代码示例。第一个 <rules> 元素迁移了源计算机上除 C:\Documents and Settings 中的文件之外的所有 .doc 文件。第二个 <rules> 元素将从 C:\Documents and Settings 中迁移所有 .doc 文件,但排除其他用户配置文件中的 .doc 文件。因为将在每个已迁移用户的上下文中处理第二个 <rules> 元素,所以最终结果就是想要的行为。最终结果就是想要的结果。

    <rules context="System">
      <include>
        <objectSet>
          <script>MigXmlHelper.GenerateDrivePatterns ("* [*.doc]", "Fixed")</script>
        </objectSet>
      </include>
      <exclude>
        <objectSet>
          <pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
        </objectSet>
      </exclude>
    </rules>
    <rules context="User">
      <include>
        <objectSet>
          <pattern type="File">%ProfilesFolder%\* [*.doc]</pattern>
        </objectSet>
      </include>
      <exclude>
        <objectSet>
          <script>MigXmlHelper.GenerateUserPatterns ("File","%userprofile%\* [*.doc]", "FALSE")</script>
        </objectSet>
      </exclude>
    </rules>
    

MigXmlHelper.GenerateDocPatterns

该帮助程序功能会调用文档查找程序扫描系统,查找要迁移的所有文件。可以在系统或用户的上下文中进行调用,在特定范围内进行扫描。

设置 是否为必需?

ScanProgramFiles

否 (default = FALSE)

可以是 TRUE 或 FALSE。ScanProgramFiles 参数会确定文档查找程序是否扫描 Program Files 目录以收集已知应用程序的已注册文件扩展名。例如,当设置为 TRUE 时,如果 .jpg 是已注册到 Photoshop 的文件扩展名,则它将查找并迁移 Photoshop 目录下的 .jpg 文件。

IncludePatterns

否 (default=TRUE)

可以是 TRUE 或 FALSE。TRUE 将生成包含模式,并可以添加到 <include> 元素下。FALSE 将生成排除模式,并可以添加到 <exclude> 元素下。

SystemDrive

否 (default = FALSE)

可以是 TRUE 或 FALSE。如果为 TRUE,则会为系统驱动器施加所有模式限制。

 <!-- This component migrates data in user context -->
  <component type="Documents" context="User">
    <displayName>MigDocUser</displayName>
    <role role="Data">
      <rules>
        <include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>
          <objectSet>
            <script>MigXmlHelper.GenerateDocPatterns ("false")</script>
          </objectSet>
        </include>
        <exclude>
          <objectSet>
           <script>MigXmlHelper.GenerateDocPatterns ("false", "false", "false")</script>
          </objectSet>
        </exclude>
      </rules>
    </role>
  </component>

简单执行脚本

下述脚本没有返回值。可以利用带有 <processing> 元素内的 <script> 元素的错误。

  • AskForLogoff()。迁移结束时,提示用户注销。例如:

         <processing when="apply-success">
              <script>MigXmlHelper.AskForLogoff()</script>
         </processing>
    
  • ConvertToShortFileName(RegistryEncodedLocation)。如果 RegistryEncodedLocation 是现有文件的完整路径,则该函数将文件转换到它的短文件名,然后它将更新注册表值。

  • KillExplorer()。针对当前用户上下文,停止 Explorer.exe。这将允许访问在 Explorer.exe 运行时保持打开的特定键和文件。例如:

         <processing when="pre-apply">
              <script>MigXmlHelper.KillExplorer()</script>
         </processing>
    
  • RegisterFonts(FileEncodedLocation)。注册给定字体或给定目录中的所有字体。例如:

    <processing when="apply-success">
    <script>MigXmlHelper.RegisterFonts("%CSIDL_COMMON_FONTS%")</script>
    </processing>
    
  • **RemoveEmptyDirectories (DirectoryEncodedPattern)。**删除目标计算机上与 DirectoryEncodedPattern 相匹配的任何空目录。

  • **RestartExplorer()。**迁移结束时,将重新启动 Explorer.exe。例如:

         <processing when="post-apply">
              <script>MigXmlHelper.RestartExplorer()</script>
         </processing>
    
  • StartService (ServiceName、 OptionalParam1、 OptionalParam2、…)。 启动由 ServiceName 确定的服务。ServiceName 是容纳给定服务数据的 HKLM\System\CurrentControlSet\Services 的子键,可选参数(如果有)将传递到 StartService API。有关详细信息,请参阅 此 Microsoft 网站

  • **StopService (ServiceName)**停止由 ServiceName 确定的服务。ServiceName 是容纳给定服务数据的 HKLM\System\CurrentControlSet\Services 的子键,

  • **SyncSCM(ServiceShortName)。**在迁移引擎进行修改后,从注册表 (HKLM\System\CurrentControlSet\Services\ServiceShortName [Start]) 读取启动类型值,然后使用新值对服务控制管理 (SCM) 进行同步处理。

<text>

对于一个迁移 .xml 文件中的任何环境变量,都可以使用 <text> 元素设置值。

  • **出现次数:**在每个 <variable> 元素中都是一次。

  • 父元素: <variable>

  • **子元素:**无。

语法:

<text>NormalText</text>

设置

NormalText

将按正常文本进行解释。

例如:

<variable name="QuickTime5or6DataSys">
  <text>%CSIDL_COMMON_APPDATA%\QuickTime</text> 
</variable>

<unconditionalExclude>

<unconditionalExclude> 元素从迁移中排除了指定的文件和注册表值,无论任何迁移 .xml 文件或 Config.xml 文件中其他包含规则如何,都是如此。将不会迁移此处声明的对象,因为该元素的优先级高于其他所有元素。例如,即使存在用于包含 .mp3 文件的显式 <include> 规则,如果使用此选项指定进行排除,则不会迁移它们。

如果要从源计算机中排除所有 .mp3 文件,请使用此元素。或者,如果要使用其他方法备份 C:\UserData,则你可以从迁移中排除整个文件夹。但是,请谨慎使用此元素,因为如果一个应用程序需要你排除的文件,则在目标计算机上,该应用程序可能无法正常工作。

  • **出现次数:**无限制。

  • 父元素: <rules>

  • 子元素: <objectSet>

语法:

<unconditionalExclude></unconditionalExclude>

下述 .xml 文件从迁移中排除了所有 .mp3 文件:有关如何使用该元素的更多示例,请参阅排除文件和设置

<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/excludefiles">
  <component context="System" type="Documents">
        <displayName>Test</displayName>
        <role role="Data">
            <rules>
             <unconditionalExclude>
                        <objectSet>
    <script>MigXmlHelper.GenerateDrivePatterns ("* [*.mp3]", "Fixed")</script>
                        </objectSet> 
             </unconditionalExclude>
            </rules>
        </role>
    </component>
</migration>

<variable>

<variable> 是 <environment> 元素中的必要元素。对于每个 <variable> 元素,都必须存在一个 <objectSet>、<script> 或 <text> 元素。<variable> 元素的上下文会为环境变量分配一个文本值。该元素具有下述三个选项:

  1. 如果 <variable> 元素包含 <text> 元素,则变量元素的值将为 <text> 元素的值。

  2. 如果 <variable> 元素包含 <script> 元素并且调用脚本产生了非空字符串,则 <variable> 元素值将为脚本调用的结果值。

  3. 如果 <variable> 元素包含 <objectSet> 元素,并且评估 <objectSet> 元素至少产生了一个对象模式,则与生成对象模式相匹配的第一个对象值将成为变量元素的值。

  • **出现次数:**无限制

  • 父元素: <environment>

  • 必需子元素: <text> 或 <script> 或 <objectSet>

语法:

<variable name="ID" remap=TRUE|FALSE>

</variable>

设置 是否为必需?

名称

ID 是用于引用环境变量的名称字符串值。我们建议,ID 开头应采用组件名,以避免命名空间冲突。例如,如果你的组件名为 MyComponent,并且要使用定义组件安装路径的变量,则应指定 MyComponent.InstallPath

remap

否,default = FALSE

指定是否将此环境变量作为重新映射环境变量进行评估。对于位于该环境变量值下路径中的对象,会自动迁移到环境变量在目标计算机上指向的位置。

下述示例取自 MigApp.xml 文件:

<environment>
   <variable name="HklmWowSoftware">
      <text>HKLM\Software</text>
   </variable>
   <variable name="WinZip8or9or10Exe">
      <script>MigXmlHelper.GetStringContent("Registry","%HklmWowSoftware%\Microsoft\Windows\CurrentVersion\App Paths\winzip32.exe []")</script>
   </variable>
</environment>

<version>

<version> 元素定义组件的版本,但不会影响迁移。

  • **出现次数:**零次或一次

  • 父元素: <component>

  • **子元素:**无

语法:

<version>ComponentVersion</version>

设置 是否为必需?

ComponentVersion

包含了模式的组件版本。

例如:

<version>4.*</version>

<windowsObjects>

<windowsObjects> 元素仅供 USMT 内部使用。不要使用此元素。

附录

指定位置

  • 指定编码位置。所有帮助程序功能中所用的编码位置是对象名称的清晰字符串表示。它包含了节点部分,后面可以选择添加方括号括起的叶。这清晰地区分了节点和叶。

    例如,按此方式指定 C:\Windows\Notepad.exe:c:\Windows[Notepad.exe]。同样,按此方式指定 C:\Windows\System32:c:\Windows\System32。(注意,不存在 [] 构造。)

    表示注册表与此很相似。注册表项的默认值用空白 [] 结构表示。例如,HKLM\SOFTWARE\MyKey 注册表项的默认值将为 HKLM\SOFTWARE\MyKey[]

  • 指定位置模式按照与指定实际位置的类似方式,指定位置模式。一个例外是节点和叶都接受模式。但是,来自节点的模式不会扩展到叶。

    例如,模式 c:\Windows\* 将匹配 Windows 目录和所有子目录。但它不匹配这些路径中的任何文件。如也要与文件相匹配,则必须指定 c:\Windows\*[*]

内部 USMT 功能

下述功能仅供 USMT 内部使用。请勿在 .xml 文件中使用它们。

  • AntiAlias

  • ConvertScreenSaver

  • ConvertShowIEOnDesktop

  • ConvertToOfficeLangID

  • MigrateActiveDesktop

  • MigrateAppearanceUPM

  • MigrateDisplayCS

  • MigrateDisplaySS

  • MigrateIEAutoSearch

  • MigrateMouseUPM

  • MigrateSoundSysTray

  • MigrateTaskBarSS

  • SetPstPathInMapiStruc

有效版本标记

可以将下述版本标记与多种帮助功能配合使用:

  • “CompanyName”

  • “FileDescription”

  • “FileVersion”

  • “InternalName”

  • “LegalCopyright”

  • “OriginalFilename”

  • “ProductName”

  • “ProductVersion”

下述版本标记包含可以比较的值:

  • “FileVersion”

  • “ProductVersion”

另请参阅

其他资源

USMT XML 参考