Конфликты и приоритеты
Назначение: Windows 7, Windows 8, Windows 8.1, Windows Vista
Когда вы включаете, исключаете и перенаправляете файлы и параметры, важно понимать, как Средство миграции пользовательской среды 5.0 обрабатывает конфликты и приоритетность. При работе с Средство миграции пользовательской среды необходимо иметь в виду перечисленные ниже важнейшие рекомендации по конфликтам и приоритетам.
Если внутри компонента имеются конфликтующие правила, то применяется наиболее частное правило. Однако правило <unconditionalExclude> является исключением, потому что оно имеет приоритет перед всеми остальными правилами. Имена каталогов имеют приоритет перед расширениями файлов. См. примеры в разделе Что происходит при конфликте правил <include> и <exclude>? и первый пример в разделе Примеры приоритетности правил <include> и <exclude>в данном разделе.
Взаимное влияние на основе приоритета более частного актуально только для правил внутри одного компонента. Правила в разных компонентах не оказывают взаимного влияния, за исключением правила <unconditionalExclude>.
Если правила одинаково частные, то правило <exclude> имеет приоритет перед правилом <include>. Например, если вы используете правило <exclude> для исключения какого-либо файла и правило <include> для включения того же файла, то файл будет исключен.
Порядок компонентов не имеет значения. Не имеет значения, в каком XML-файле перечисляются компоненты, потому что каждый компонент обрабатывается независимо от других компонентов во всех XML-файлах.
Порядок правил <include> и <exclude> в компоненте не имеет значения.
Для глобального исключения данных можно использовать элемент <unconditionalExclude>. Этот элемент исключает объекты независимо от любых других правил <include> в XML-файлах. Например, вы можете использовать элемент <unconditionalExclude> для исключения всех имеющихся на компьютере MP3-файлов или для исключения всех файлов из папки C:\UserData.
В этом разделе
Общие
Как соотносятся между собой правила в разных компонентах?
Как работают приоритеты для файла Config.xml?
Как средство миграции пользовательской среды обрабатывает каждый компонент в XML-файле с несколькими компонентами?
Как обрабатываются правила?
Как средство миграции пользовательской среды объединяет все XML-файлы, указанные в командной строке?
Правила <include> и <exclude>
Что происходит при конфликте правил <include> и <exclude>?
Примеры приоритетности правил <include> и <exclude>
Конфликты файлов
Поведение по умолчанию при конфликте файлов
Как действует правило <merge> при наличии конфликтов файлов?
Общие
Как соотносятся между собой правила в разных компонентах?
Взаимное влияние, основанное на приоритете более частного, возможно только для правил в одном компоненте, кроме правила <unconditionalExclude>. Правила в разных компонентах не влияют друг на друга. Если в одном компоненте присутствует правило <include>, а в другом компоненте – идентичное правило <exclude>, данные будут перенесены, так как эти два правила взаимно независимы.
Если у вас для одного и того же файла есть правило <include> в одном компоненте и правило <locationModify> в другом компоненте, файл будет перенесен в обоих расположениях. То есть он будет включен в соответствии с правилом <include> и будет перенесен в соответствии с правилом <locationModify>.
Следующий XML-файл переносит все файлы из каталога C:\Userdocs, включая MP3-файлы, так как правило <exclude> определено в отдельном компоненте.
<migration urlid="https://www.microsoft.com/migration/1.0/migxmlext/UserDocs">
<component type="Documents" context="System">
<displayName>User Documents</displayName>
<role role="Data">
<rules>
<exclude>
<objectSet>
<pattern type="File">C:\Userdocs\* [*.mp3]</pattern>
</objectSet>
</exclude>
</rules>
</role>
</component>
<component type="Documents" context="System">
<displayName> User documents to include </displayName>
<role role="Data">
<rules>
<include>
<objectSet>
<pattern type="File"> C:\Userdocs\ [*]</pattern>
</objectSet>
</include>
</rules>
</role>
</component>
</migration>
Как работают приоритеты для файла Config.xml?
Определение migrate="no"
в файле Config.xml равносильно удалению соответствующего компонента из XML-файла переноса. Тем не менее, если вы задали migrate="no"
для папки "Мои документы", но в XML-файле переноса у вас есть правило, аналогичное одному из показанных ниже (включающее все DOC-файлы из папки "Мои документы"), будут перенесены только DOC-файлы, а все остальные файлы будут исключены.
<include>
<objectSet>
<pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
</objectSet>
</include>
Как средство миграции пользовательской среды обрабатывает каждый компонент в XML-файле с несколькими компонентами?
Порядок компонентов не имеет значения. Каждый компонент обрабатывается независимо от остальных компонентов. Например, если у вас для одного и того же файла есть правило <include> в одном компоненте и правило <locationModify> в другом компоненте, файл будет перенесен в обоих расположениях. То есть он будет включен в соответствии с правилом <include> и будет перенесен в соответствии с правилом <locationModify>.
Как обрабатываются правила?
Существует две обширных категории правил.
Правила, которые влияют на поведение средств ScanState и LoadState. Например, правила <include>, <exclude> и <unconditionalExclude> в XML-файлах обрабатываются для каждого компонента. Для каждого компонента Средство миграции пользовательской среды создает список включений и список исключений. Некоторые правила в компоненте могут быть отменены из-за приоритета более частного, но все остальные правила будут обработаны. Для каждого правила <include> Средство миграции пользовательской среды выполняет итерацию по элементам, чтобы проверить, нет ли в них расположений, которые нужно исключить. Средство миграции пользовательской среды перечисляет все объекты и создает список объектов, которые будут собраны для каждого пользователя. После создания списка каждый объект сохраняется или переносится на конечный компьютер.
Правила, которые влияют на поведение только средства LoadState. По умолчанию правила <locationModify>, <contentModify> и <destinationCleanup> не влияют на ScanState. Они обрабатываются только LoadState. Сначала средство LoadState определяет содержимое и расположение каждого компонента, основываясь на правилах <locationModify> и <contentModify>. Затем LoadState обрабатывает все правила <destinationCleanup> и удаляет данные с конечного компьютера. В завершение LoadState применяет компоненты к компьютеру.
Как средство миграции пользовательской среды объединяет все XML-файлы, указанные в командной строке?
Средство миграции пользовательской среды не различает XML-файлы по именам или содержимому. Каждый компонент в файлах обрабатывается отдельно. Средство миграции пользовательской среды поддерживает несколько XML-файлов только для упрощения обслуживания и организации компонентов в этих файлах. Для того чтобы отличить один компонент от другого, Средство миграции пользовательской среды использует идентификатор urlid, поэтому следите, чтобы каждый XML-файл, который вы указываете в командной строке, имел уникальный идентификатор переноса urlid.
Правила <include> и <exclude>
Что происходит при конфликте правил <include> и <exclude>?
Если внутри компонента имеются конфликтующие правила, применяется наиболее частное правило, за исключением правила <unconditionalExclude>, которое имеет приоритет перед всеми остальными правилами. Если правила одинаково частные, данные не будут перенесены. Например, если вы исключаете какой-либо файл, а затем включаете этот же файл, файл не переносится. Если конфликтующие правила определены в разных компонентах, они не будут иметь взаимного влияния, потому что каждый компонент обрабатывается независимо.
В следующем примере MP3-файлы не будут исключены из переноса. Причина заключается в том, что имена каталогов имеют приоритет перед расширениями файлов.
<include>
<objectSet>
<pattern type="File">C:\Data\* [*]</pattern>
</objectSet>
</include>
<exclude>
<objectSet>
<pattern type="File"> C:\* [*.mp3]</pattern>
</objectSet>
</exclude>
Примеры приоритетности правил <include> и <exclude>
В следующем примере показано, как Средство миграции пользовательской среды обрабатывает правила <include> и <exclude>. Если правила определены в разных компонентах, итоговое поведение будет одинаковым независимо от того, определены ли компоненты в одном или разных XML-файлах переноса.
Включение и исключение файлов
Включение и исключение объектов реестра
Включение и исключение файлов
Если следующий код присутствует в одном компоненте | Итоговое поведение | Объяснение |
---|---|---|
|
Переносит все файлы и вложенные папки в Dir1 (включая все TXT-файлы в корневом каталоге диска C:). |
Правило <exclude> не оказывает влияния на результат переноса, потому что правило <include> более частное. |
|
Переносит все файлы и вложенные папки в C:\Dir1, кроме TXT-файлов в C:\Dir1\Dir2 и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит все файлы и вложенные папки в C:\Dir1, кроме TXT-файлов в C:\Dir1\ и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
|
Ни один элемент не будет перенесен. |
Правила одинаково частные, поэтому правило <exclude> имеет приоритет перед правилом <include>. |
|
Переносит все TXT-файлы в Dir1 и TXT-файлы из вложенных папок, кроме Dir2. Из каталога Dir2 или его вложенных папок не переносится ни одного файла. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит все файлы и вложенные папки из Dir2 за исключением TXT-файлов Dir1 и всех вложенных папок Dir1 (включая Dir2). |
Обрабатываются оба правила, как и планировалось. |
Если следующий код присутствует в разных компонентах | Итоговое поведение | Объяснение |
---|---|---|
Компонент 1:
Компонент 2:
|
Переносит все файлы и вложенные папки из C:\Dir1\ (включая C:\Dir1\Dir2\). |
Правила в разных компонентах не влияют друг на друга, кроме правила <unconditionalExclude>. Таким образом, несмотря на то что в данном примере некоторые TXT-файлы были исключены при обработке компонента 1, они были включены при обработке компонента 2. |
Компонент 1:
Компонент 2:
|
Переносит все файлы и вложенные папки из C:\Dir1 кроме TXT-файлов в C:\Dir1\ и его вложенных папках. |
Обрабатываются оба правила, как и планировалось. |
Компонент 1:
Компонент 2:
|
Переносит все TXT-файлы из Dir1 и любых вложенных папок. |
Компонент 1 не содержит правила <include>, поэтому правило <exclude> не обрабатывается. |
Включение и исключение объектов реестра
Если следующий код присутствует в одном компоненте | Итоговое поведение | Объяснение |
---|---|---|
|
Переносит все разделы в HKLM\Software\Microsoft\Command Processor кроме DefaultColor. |
Обрабатываются оба правила, как и планировалось. |
|
Переносит только DefaultColor в HKLM\Software\Microsoft\Command Processor. |
DefaultColor переносится потому, что правило <include> более частное, чем правило <exclude>. |
|
Не переносит DefaultColor. |
Правила одинаково частные, поэтому правило <exclude> имеет приоритет перед правилом <include>. |
Если следующий код присутствует в разных компонентах | Итоговое поведение | Объяснение |
---|---|---|
Компонент 1:
Компонент 2:
|
Переносит все разделы и значения в HKLM\Software\Microsoft\Command Processor. |
Правила в разных компонентах не влияют друг на друга, кроме правила <unconditionalExclude>. Следовательно, в этом примере объекты, которые были исключены при обработке компонента 1, были включены при обработке компонента 2. |
Конфликты файлов
Поведение по умолчанию при конфликте файлов
Если не определено правило <merge>, то поведение по умолчанию для реестра заключается в том, что данные с исходного компьютера перезаписывают данные на конечном компьютере. Поведение по умолчанию для файлов заключается в том, что файлы на исходном компьютере получают имена с приращением, например: Исходное_имя_файла(1).Исходное_расширение, Исходное_имя_файла(2).Исходное_расширение и т. д.
Как действует правило <merge> при наличии конфликтов файлов?
При обнаружении конфликта Средство миграции пользовательской среды выбирает наиболее частное правило <merge> и применяет его, чтобы устранить конфликт. Например, если у вас есть правило <merge> для C:\* [*] со значением sourcePriority() и другое правило <merge> для C:\subfolder\* [*] со значением destinationPriority(), то Средство миграции пользовательской среды воспользуется правилом destinationPriority(), потому что оно более частное.
Пример сценария
На исходном компьютере имеются следующие файлы:
C:\Data\SampleA.txt
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
На конечном компьютере имеются следующие файлы:
C:\Data\SampleB.txt
C:\Data\Folder\SampleB.txt
У вас есть пользовательский XML-файл, который содержит следующий код:
<include>
<objectSet>
<pattern type="File">c:\data\* [*]</pattern>
</objectSet>
</include>
Для этого примера в следующей таблице описывается итоговое поведение при добавлении кода в первый столбец вашего пользовательского XML-файла.
Если вы указываете следующий код | Итоговое поведение |
---|---|
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState будет восстановлен только файл C:\Data\SampleA.txt. |
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState будут восстановлены все файлы с перезаписью файлов на конечном компьютере. |
|
При выполнении команды ScanState все файлы будут добавлены в хранилище. При выполнении команды LoadState произойдет следующее.
|
См. также
Другие ресурсы
Справочные материалы по XML для средства миграции пользовательской среды