迁移应用程序设置

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

本文定义如何创作自定义迁移 .xml 文件,该文件使用 迁移默认 MigApp.xml未迁移的应用程序的设置。 应在安装应用程序后,但在用户首次运行应用程序之前迁移设置。

本文不包含有关如何迁移在应用程序特定存储区中存储设置的应用程序的信息,而只迁移将信息存储在文件或注册表中的应用程序。 它还不包含有关如何迁移用户使用应用程序创建的数据的信息。 例如,如果应用程序使用特定模板创建 .doc 文件,本文不讨论如何迁移 .doc 文件和模板本身。

开始前

应标识包含源计算机的操作系统的测试计算机。 测试计算机还应具有需要迁移其设置的应用程序。 例如,如果从 Windows 10 迁移到Windows 11,请在测试计算机上安装 Windows 10,然后安装应用程序。

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

在 USMT 迁移设置之前,检查应用程序是否安装在源计算机上,以及它是正确的版本。 如果源计算机上未安装该应用程序,USMT 仍会花时间搜索应用程序的设置。 更重要的是,如果 USMT 为未安装的应用程序收集设置,它可能会迁移导致目标计算机无法正常运行的设置。 此外,确定应用程序是否有多个版本,因为新版本可以将设置存储在其他位置。 不匹配的应用程序版本可能会导致目标计算机上的意外结果。

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

检查注册表中是否有应用程序卸载密钥

安装许多应用程序(尤其是使用 Microsoft Windows Installer 技术安装的应用程序)时,将在以下位置创建应用程序卸载密钥:

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

若要查找特定应用程序的 Uninstall 密钥,请在 Uninstall 注册表项下搜索以下项之一:

  • 应用程序的名称。
  • 应用程序可执行文件的名称。
  • 创建应用程序的公司的名称。

若要搜索注册表,请使用注册表编辑器 Regedit.exeRegedit.exe 位于 中存储的路径中 %SystemRoot%,通常为 C:\Windows

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

还应检查安装应用程序的可执行文件的应用程序二进制文件。 若要为应用程序二进制文件检查,请确定应用程序的安装位置以及可执行文件的名称。 大多数应用程序将应用程序二进制文件的安装位置存储在注册表中。 在找到包含安装路径的注册表值之前,应搜索以下项之一的注册表:

  • 应用程序的名称。
  • 应用程序可执行文件的名称。
  • 创建应用程序的公司的名称。

确定应用程序可执行文件的路径后,DoesFileVersionMatch可以使用帮助程序函数检查应用程序可执行文件的正确版本。 有关如何使用 DoesFileVersionMatch 帮助程序函数的示例,请参阅 文件的 Windows Live™ Messenger 部分 MigApp.xml

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

接下来,浏览用户界面并列出所有可用设置。 如果存在不需要迁移的设置,则可以减少列表。 若要确定每个设置的存储位置,请更改设置。 更改设置后,通过 进程监视器等工具监视注册表和文件系统上的活动。 安装应用程序时创建的二进制文件和注册表设置不需要迁移。 当应用程序重新安装到目标计算机上时,它会重新创建这些设置。 仅需要迁移自定义设置。

如何确定每个设置的存储位置

  1. Sysinternals 网站下载文件和注册表监视工具,例如进程监视器 (Procmon)

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

  3. 筛选工具的输出,使其仅显示应用程序所做的更改。

    注意

    大多数应用程序将其设置存储在用户配置文件下。 也就是说,存储在文件系统中的设置位于目录下 %UserProfile% ,注册表中存储的设置位于配置单元下 HKEY_CURRENT_USER 。 对于这些应用程序,可以筛选文件和注册表监视工具的输出,以便仅在这些位置下显示活动。 这种筛选大大减少了需要检查的输出量。

  4. 启动监视工具,更改设置,并查找更改设置时发生的注册表和文件系统写入。 确保所做的更改实际生效。 例如,如果在“选项”对话框中选择“检查”框来更改 Microsoft Word 中的设置,则通常只有在通过选择“确定”关闭对话框后,更改才会生效。

  5. 更改设置后,请注意对文件系统和注册表的更改。 每个设置可能有多个文件或注册表值。 应确定更改此设置所需的最小文件和注册表更改集。 需要迁移这组文件和注册表项才能迁移设置。

    注意

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

步骤 3:确定如何应用收集的设置

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

案例 1:目标计算机上的应用程序版本比源计算机上的应用程序版本新

在这种情况下,较新版本的应用程序可能无需修改即可从源计算机读取设置。 也就是说,从较旧版本的应用程序收集的数据有时与较新版本的应用程序兼容。 但是,如果满足以下任一条件,则可能需要修改设置位置:

  • 较新版本的应用程序能够从旧版本导入设置。 迁移设置后,用户第一次运行较新版本时,通常会发生此映射。 某些应用程序在迁移设置后自动导入设置。 但是,其他应用程序仅当应用程序从旧版本升级时才会导入设置。 升级应用程序时,会安装一组文件和/或注册表项,指示以前安装了应用程序的旧版本。 如果执行较新版本的全新安装,则计算机不包含这些文件和注册表项。 如果文件和注册表项不存在,则不会发生映射。 为了诱使较新版本的应用程序启动此导入过程,迁移脚本可能需要在目标计算机上创建这些文件和/或注册表项。

    若要确定需要创建哪些文件和/或注册表项/值,以便导入正常工作,请执行以下操作:

    1. 将较旧版本的应用程序升级到较新的版本。
    2. 使用 如何确定每个设置的存储位置中所述的相同过程监视对文件系统和注册表所做的更改。

    知道计算机所需的文件集后, <可以使用 addObjects> 元素将它们添加到目标计算机。

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

案例 2:目标计算机已包含应用程序的设置

Microsoft建议在安装应用程序之后,但在用户首次运行应用程序之前迁移设置。 Microsoft建议此过程,因为此过程确保在迁移设置时目标计算机上没有设置。 如果必须在迁移之前安装应用程序,则应使用 <destinationCleanup> 元素删除任何现有设置。 如果出于任何原因需要保留目标计算机上的设置, <则可以使用 merge> 元素和 DestinationPriority 帮助程序函数。

案例 3:应用程序在安装时覆盖设置

Microsoft建议在安装应用程序之后,但在用户首次运行应用程序之前迁移设置。 Microsoft建议此过程,因为此过程确保在迁移设置时目标计算机上没有设置。 此外,当安装某些应用程序时,它们将覆盖计算机上的任何现有设置。 在此方案中,如果在安装应用程序之前迁移了数据,则会覆盖自定义设置。 此方案对于将设置存储在用户配置文件外部位置的应用程序很常见 (这些设置通常是应用于所有用户) 的设置。 安装应用程序时,有时会覆盖这些通用设置,它们将被默认值替换。 若要避免此问题,必须在将文件和设置迁移到目标计算机之前安装这些应用程序。 默认情况下,使用 USMT,源计算机中的数据将覆盖目标计算机上已存在于同一位置的数据。

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

完成步骤 1 到 3 后,创建一个基于更新信息迁移 应用程序的 自定义迁移.xml文件。 该文件 MigApp.xml 可用作模型,因为它包含本文中讨论的许多概念的示例。 另请参阅 自定义 XML 示例 ,了解另一 个示例.xml 文件。

注意

Microsoft建议创建单独的 .xml 文件,而不是将脚本添加到该文件 MigApp.xml 。 建议使用单独的 .xml 文件, MigApp.xml 因为该文件是一个大文件,很难读取和编辑。 此外,如果重新安装 USMT,该文件 MigApp.xml 将被文件的默认版本覆盖,并且自定义版本将丢失。

重要提示

某些应用程序将信息存储在用户配置文件中,例如应用程序安装路径、计算机名称等。不应迁移存储在用户配置文件中的应用程序信息,应从迁移中排除。

脚本应执行以下操作:

  1. 检查是否安装了正确的应用程序版本:

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

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

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

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

    • 如果目标计算机上的应用程序版本比源计算机上的版本新,并且应用程序无法导入设置,则脚本应:

      1. 使用 addObjects> 元素添加触发导入的文件<集。
      2. 使用 <locationModify> 元素和 RelativeMoveExactMove 帮助程序函数创建一个映射,以将旧设置应用于目标计算机上的正确位置。
    • 如果必须在迁移设置之前安装应用程序,请使用 destinationCleanup> 元素删除目标计算机上<已有的任何设置。

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

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

在测试计算机上,安装将在目标计算机上安装的操作系统。 例如,如果计划从 Windows 10 迁移到Windows 11,请安装 Windows 11,然后在 Windows 11 中安装应用程序。 接下来,在测试计算机上运行 LoadState 并验证所有设置是否迁移。 根据需要进行更正,并重复此过程,直到正确迁移所有必要的设置。

为了加快收集和迁移数据所需的时间,一次只能迁移一个用户。 除正在测试的应用程序外,所有其他组件都可以从迁移中排除。 若要在迁移中仅指定 User1 ,请输入:

/ue:*\* /ui:user1

有关详细信息,请参阅 ScanState 语法一文中的排除文件和设置一文和用户选项部分。 若要排查问题,检查进度日志、ScanState 日志和 LoadState 日志。 日志包含可能指向迁移问题的警告和错误。