迁移应用程序设置

可创建自定义 .xml 文件以迁移特定的行业应用程序设置,或更改用户状态迁移工具 (USMT) 10.0 的默认迁移行为。若要使 ScanState 和 LoadState 使用此文件,必须在这两个命令行上指定自定义 .xml 文件。

本主题定义了如何使用 MigApp.xml 创作用于迁移应用程序设置的自定义迁移 .xml 文件(该文件在默认情况下不会迁移)。你应在安装应用程序之后、用户第一次运行该应用程序之前迁移这些设置。

本主题不包含有关如何迁移在应用程序特定存储中存储设置的应用程序的信息,仅包含有关如何迁移在文件或注册表中存储信息的应用程序的信息。本主题还不包含有关如何迁移用户使用该应用程序创建的数据的信息。例如,如果应用程序使用特定模板创建 .doc 文件,本主题不会讨论如何迁移该 .doc 文件以及模板本身。

本主题内容

  • 开始之前

  • 步骤 1:验证该应用程序是否已安装在源计算机上,并且该应用程序的版本是否与在目标计算机上安装的版本相同。

  • 步骤 2:标识要收集的设置并确定每个设置存储在计算机上的位置。

  • 步骤 3:标识如何应用已收集的设置。

  • 步骤 4:为该应用程序创建迁移 XML 组件。

  • 步骤 5:测试应用程序设置迁移。

开始之前

应标识包含源计算机的操作系统的测试计算机,以及要迁移其设置的应用程序。例如,如果计划从 Windows 7 迁移到 Windows 10,则应在测试计算机上安装 Windows 7,然后安装应用程序。

步骤 1:验证该应用程序是否已安装在源计算机上,并且该应用程序的版本是否与在目标计算机上安装的版本相同。

在 USMT 迁移设置前,需要检查应用程序是否已安装在源计算机上以及版本是否正确。如果应用程序未安装在源计算机上,你可能不希望 USMT 在搜索应用程序设置上花费大量时间。更重要的是,如果 USMT 收集了未安装的应用程序的设置,它可能会迁移将导致目标计算机无法正常运行的设置。还应检查该应用程序是否存在多个版本。这是因为新版本可能不会将设置存储在同一位置,这可能会导致在目标计算机上出现意外结果。

有多种方法可以检测应用程序是否已安装。最佳做法是检查注册表中的应用程序卸载密钥,然后在计算机中搜索安装了该应用程序的可执行文件。你应该同时检查这两项,这一点很重要,因为有时同一应用程序的不同版本会共享相同的卸载密钥。因此即使存在密钥,它也可能与你所需的应用程序版本不对应。

在注册表中检查应用程序卸载密钥。

在安装了许多应用程序(特别是使用 Microsoft® Windows® 安装程序技术安装的应用程序)时,将在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下创建应用程序卸载密钥。例如,在安装 Adobe Acrobat Reader 7 时,将创建名为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall \{AC76BA86-7AD7-1033-7B44-A70000000000} 的密钥。因此,如果计算机中包含此密钥,则表示计算机中已安装了 Adobe Acrobat Reader 7。可使用 DoesObjectExist 帮助程序函数检查是否存在注册表项。

通常,可以通过在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下搜索以下内容来查找此密钥:应用程序名称、应用程序可执行文件的名称或制作该应用程序的企业名称。可以使用“注册表编辑器”(位于 %SystemRoot% 中的 Regedit.exe)来搜索注册表。

在文件系统中检查应用程序可执行文件。

还应在应用程序二进制文件中检查安装该应用程序的可执行文件。若要实现此目的,首先需要确定安装该应用程序的位置以及可执行文件的名称。大部分应用程序都将应用程序二进制文件的安装位置存储在注册表中。你应该在注册表中搜索应用程序名称、应用程序可执行文件的名称或制作该应用程序的企业名称,直到找到包含安装路径的注册表值为止。在确定应用程序可执行文件的路径后,可使用 DoesFileVersionMatch 帮助程序函数检查正确版本的应用程序可执行文件。有关如何执行此操作的示例,请参阅 MigApp.xml 文件的 Windows Live™ Messenger 部分。

步骤 2:标识要收集的设置并确定每个设置存储在计算机上的位置。

接下来,应该浏览用户界面并列出所有可用设置。如果有不想迁移的设置,可以缩减该列表。若要确定每个设置的存储位置,需要更改每个设置并监视注册表和文件系统中的活动。不需要迁移在安装应用程序时生成的二进制文件和注册表设置。这是因为你将需要在目标计算机上重新安装该应用程序。只需要迁移那些可自定义的设置。

Mt299190.wedge(zh-cn,VS.85).gif如何确定每个设置的存储位置

  1. Windows Sysinternals 网站下载文件和注册表监视工具,如 Regmon 和 Filemon 工具。

  2. 关闭尽可能多的应用程序,以限制计算机上的注册表和文件系统活动。

  3. 筛选上述工具的输出,以便只显示由该应用程序进行的更改。

    注意  

    大部分应用程序的设置都存储在用户配置文件中。即,存储在文件系统中的设置位于 %UserProfile% 目录中,而存储在注册表中的设置则位于 HKEY_CURRENT_USER 配置单元中。对于这些应用程序,可以筛选文件和注册表监视工具的输出,以便仅显示在这些位置中的活动。这样将显著减少需要检查的输出量。

     

  4. 启动监视工具、更改设置并查找在你更改设置时出现的注册表和文件系统写入。请确保你所做的更改确实生效。例如,如果通过在“选项”对话框中选中某个复选框来更改 Microsoft Word 中的某个设置,则在单击“确定”****关闭对话框之前此更改通常不会生效。

  5. 更改设置后,请记录对文件系统和注册表的更改。对于每个设置,可能有不止一个文件或注册表值。应该标识此设置所需的最小文件和注册表更改集合。你必须迁移这组文件和注册表项才能迁移该设置。

    注意  

    更改应用程序设置总是会导致写入注册表项。如果可能,请筛选文件和注册表监视器工具的输出,以仅显示对文件和注册表项/值的写入。

     

步骤 3:标识如何应用已收集的设置。

如果源计算机上应用程序的版本与目标计算机上的版本相同,则无需修改已收集的文件和注册表项。在默认情况下,USMT 将文件和注册表项从源位置迁移到目标计算机上的对应位置。例如,如果文件从 C:\Documents and Settings\User1\My Documents 文件夹收集,并且目标计算机上的配置文件目录位于 D:\Users\User1,则 USMT 会自动将文件迁移到 D:\Users\User1\My Documents。但是,在以下三种情况下,可能需要修改某些设置的位置:

情况 1:目标计算机上应用程序的版本高于源计算机上的版本。

在这种情况下,较高版本的应用程序可能可以读取源计算机的设置,无需进行修改。即,从较低版本的应用程序收集的数据有时与较高版本的应用程序兼容。但是,如果存在下列任一情况,则可能需要修改设置位置:

  • **较高版本的应用程序能够从较低版本中导入设置。**在迁移设置后,如果用户首次运行较高版本,通常会出现此映射。某些应用程序会在迁移设置后自动执行此操作;但是,其他应用程序仅在该应用程序从较低版本升级时才执行此操作。升级应用程序时,会安装一组文件和/或注册表项,指示之前已安装较低版本的应用程序。如果对较高版本的应用程序执行全新安装(大多数迁移中出现的情况),计算机将不会包含这组文件和注册表项,因此也不会出现映射。为了使较高版本的应用程序启动此导入过程,你的迁移脚本可能需要在目标计算机上创建这些文件和/或注册表项。

    若要确认需要创建哪些文件和/或注册表项/值才能进行导入,应将较低版本的应用程序升级到较高版本,并使用如何确定每个设置的存储位置中介绍的相同过程监视对文件系统和注册表所做的更改。在了解计算机所需的文件集合后,可使用 <addObjects> 元素将它们添加到目标计算机。

  • 较高版本的应用程序无法读取源计算机的设置,也无法将这些设置导入为新格式。在这种情况下,需要为每个设置创建从原有位置到新位置的映射。为此,可以使用如何确定每个设置的存储位置中介绍的过程确定较高版本存储每个设置的位置。创建映射后,使用 <locationModify> 元素以及 RelativeMoveExactMove 帮助程序函数将这些设置应用到目标计算机上的新位置。

情况 2:目标计算机已包含应用程序的设置。

我们建议你在安装应用程序之后、用户首次运行该应用程序之前迁移这些设置。 之所以这样建议是为了确保在迁移设置时目标计算机上不存在其他设置。如果必须在迁移前安装应用程序,则应使用 <destinationCleanup> 元素删除所有现有设置。如果由于某些原因希望保留目标计算机上的设置,可使用 <merge> 元素和 DestinationPriority 帮助程序函数。

情况 3:在安装应用程序时覆盖设置。

我们建议你在安装应用程序之后、用户首次运行该应用程序之前迁移这些设置。之所以这样建议是为了确保在迁移设置时目标计算机上不存在其他设置。此外,在安装某些应用程序时,它们将覆盖计算机上的所有现有设置。在这种情况下,如果先迁移数据、再安装应用程序,则你的自定义设置将会被覆盖。对于在除用户配置文件以外的位置存储设置(通常是适用于所有用户的设置)的应用程序而言,这种情况很常见。这些通用设置有时在安装应用程序时会被覆盖,并替换为默认值。为了避免这种情况,在将文件和设置迁移到目标计算机之前,必须安装这些应用程序。在默认情况下,使用 USMT 时,来自源计算机的数据将覆盖目标计算机上同一位置中已存在的数据。

步骤 4:为该应用程序创建迁移 XML 组件

在完成步骤 1 到 3 后,将需要根据现有信息创建用于迁移应用程序的自定义迁移 .xml 文件。可将 MigApp.xml 文件用作模型,因为该文件中包含本主题中讨论的许多概念的示例。有关其他示例 .xml 文件,另请参阅自定义 XML 示例

注意  

我们建议创建单独的 .xml 文件,而不是向 MigApp.xml 文件添加脚本。这是因为 MigApp.xml 文件本身是一个非常庞大的文件,很难对其进行读取和编辑。此外,如果由于某些原因重新安装了 USMT,MigApp.xml 文件将会被默认版本的文件所覆盖,自定义版本的文件也将丢失。

 

要点  

某些应用程序在用户配置文件中存储不应迁移的信息(如应用程序安装路径、计算机名等)。应确保从迁移中排除这些文件和注册表项。

 

你的脚本应该执行以下操作:

  1. 通过以下方式检查是否已安装了正确版本的应用程序:

    • 使用 DoesObjectExist 帮助程序函数在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下搜索安装卸载密钥。

    • 使用 DoesFileVersionMatch 帮助程序函数检查正确版本的应用程序可执行文件。

  2. 如果已安装了正确版本的应用程序,请确保将每个设置都迁移到目标计算机上的相应位置。

    • 如果源计算机和目标计算机上的应用程序版本相同,可使用 <include> 和 <exclude> 元素迁移每个设置。

    • 如果目标计算机上的应用程序版本高于源计算机上的应用程序版本,并且该应用程序无法导入设置,则你的脚本应该执行下列一种操作:1) 使用 <addObjects> 元素添加可触发导入的文件集或 2) 使用 <locationModify> 元素以及 RelativeMoveExactMove 帮助程序函数创建可将原有设置应用到目标计算机上正确位置的映射。

    • 如果必须在迁移设置前安装应用程序,请使用 <destinationCleanup> 元素删除目标计算机上已存在的所有设置。

有关 .xml 元素和帮助程序函数的详细信息,请参阅 XML 元素库

步骤 5:测试应用程序设置迁移

在测试计算机上,安装将在目标计算机上安装的操作系统。例如,如果计划从 Windows 7 迁移到 Windows 10,请安装 Windows 10 和应用程序。接下来,在测试计算机上运行 LoadState,并验证是否已迁移所有设置。如果必要,请进行更正,并重复该过程,直到所有必要的设置都已正确迁移为止。

为了减少收集和迁移数据所花费的时间,可以每次只迁移一位用户,并且除了要测试的应用程序外,从迁移中排除所有其他组件。若要在迁移中仅指定 User1,请键入:/ue:*\* /ui:user1。有关详细信息,请参阅排除文件和设置以及 ScanState 语法主题中的用户选项。若要解决问题,可查看进度日志以及 ScanState 和 LoadState 日志,这些日志中包含可能与迁移问题有关的警告和错误。

相关主题

USMT XML 参考

冲突和优先级

XML 元素库

日志文件