Библиотека элементов XML

Обзор

В этом разделе описаны XML-элементы и вспомогательные функции, с помощью которых можно создавать XML-файлы переноса, применяемые при использовании средства миграции пользовательской среды (USMT). Он рассчитан на читателей, знакомых с основами XML. .

В этом разделе

Помимо XML-элементов и вспомогательных функций, в этом разделе также описано, как указать закодированные расположения и шаблоны расположений, приведены функции, предназначенные для внутреннего использования средством миграции пользовательской среды, и теги версий, которые можно использовать во вспомогательных функциях.

Элементы и вспомогательные функции

В следующей таблице перечислены вспомогательные функции и XML-элементы, которые можно использовать в 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>

<includeAttribute>

<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>

Внутренние функции средства миграции пользовательской среды

 

<addObjects>

Элемент <addObjects> имитирует присутствие одного объекта или нескольких объектов на исходном компьютере. Для указания сведений об имитируемых объектах используются дочерние элементы <object>. Если содержимым является элемент <script>, результатом будет массив объектов.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Обязательные дочерние элементы:<object>. Кроме того, необходимо указать элементы <attribute> и <location> в качестве дочерних для элемента <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>Content</attributes>

ПараметрОбязательныйЗначение

Content

Да

Этот параметр зависит от типа описываемого объекта.

  • Если атрибуты задаются для файлов, то параметр может принимать следующие значения, разделенные запятыми:

    • Archive

    • Read-only

    • System

    • Hidden

  • Если атрибуты задаются для разделов реестра, то параметр может принимать следующие значения:

    • None

    • String

    • 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">Content</bytes>

ПараметрОбязательныйЗначение

string

Нет (значение по умолчанию: No)

Указывает, как следует интерпретировать Content: как строку или как набор байтов.

expand

Нет (значение по умолчанию: Yes)

Если параметр expand имеет значение Yes, содержимое элемента <bytes> сначала разворачивается в контексте исходного компьютера, а затем интерпретируется.

Content

Да

Зависит от значения параметра string.

  • Если параметр string имеет значение Yes, то содержимое элемента <bytes> интерпретируется как строка.

  • Если параметр string имеет значение No, то содержимое элемента <bytes> интерпретируется как набор байтов. Каждые два символа представляют байт в шестнадцатеричной системе счисления. Например, 616263 соответствует строке abc в формате ANSI. Строка 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>

Элемент <commandLine> используется для запуска или остановки службы или приложения как перед запуском, так и после запуска программ ScanState и LoadState.

  • Число экземпляров: неограниченное

  • Родительские элементы:<externalProcess>

  • Дочерние элементы: нет

Синтаксис:

<commandLine>CommandLineString</commandLine>

ПараметрОбязательныйЗначение

CommandLineString

Да

Допустимая командная строка.

 

<component>

Для пользовательского XML-файла переноса элемент <component> является обязательным. Этот элемент определяет базовые конструкции XML-файла переноса. Например, в файле MigApp.xml компонент Microsoft® Office 2003 содержит другой компонент — Microsoft Office Access® 2003. Для описания компонента можно использовать дочерние элементы.

Компонент может быть вложен в другой компонент, т. е. элемент <component> может быть дочерним по отношению к элементу <role> в элементе <component> в следующих случаях: 1) если родительский элемент <component> является контейнером; 2) если роли дочернего и родительского элемента <component> совпадают.

Синтаксис:

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

hidden="Yes|No">

</component>

ПараметрОбязательныйЗначение

type

Да

Чтобы сгруппировать параметры и задать тип компонента, используйте следующие значения.

  • System: параметры операционной системы. Все компоненты Windows® определяются этим типом.

    Если type="System" и defaultSupported="FALSE", то параметры не будут переноситься, если только в XML-файлах, указываемых в командной строке LoadState, не указан эквивалентный компонент. Например, стандартный файл MigSys.xml содержит компоненты с параметрами type="System" и defaultSupported="FALSE". Если вы указываете этот файл в командной строке ScanState, то для переноса параметров его необходимо также указать в командной строке LoadState. Это связано с тем, что средство LoadState должно обнаружить эквивалентный компонент. Иными словами, компонент должен иметь то же значение атрибута переноса urlid XML-файла и отображаемое имя. В противном случае средство LoadState не перенесет эти параметры из хранилища. Это удобно в случае, если исходный компьютер работает под управлением Windows XP и выполняется перенос на Windows Vista и Windows XP, поскольку для обоих конечных компьютеров можно использовать одно хранилище.

  • Application: параметры для приложения.

  • Device: параметры для устройства.

  • Documents: указывает файлы.

context

Нет

(значение по умолчанию: UserAndSystem)

Определяет область действия этого параметра, то есть указывает, следует ли обрабатывать этот компонент в контексте конкретного пользователя, в контексте всей операционной системы или в обоих контекстах.

Максимальная область действия задается с помощью элемента <component>. Например, если элемент <component> содержит параметр context со значением User, а элемент <rules> содержит параметр context со значением UserAndSystem, то параметр context элемента <rules> будет переопределен значением User. Если элемент <rules> содержит параметр context со значением System, то он пропускается.

  • User. Оценивает компонент в контексте каждого пользователя.

  • System. Оценивает компонент один раз в контексте системы.

  • UserAndSystem. Оценивает компонент в контексте всей операционной системы и каждого пользователя.

defaultSupported

Нет

(значение по умолчанию: TRUE)

Может принимать значения TRUE, FALSE, YES или NO. Если этот параметр имеет значение FALSE или NO, компонент не будет перенесен до тех пор, пока на конечный компьютер не будет добавлен эквивалентный компонент.

Если type="System" и defaultSupported="FALSE", то параметры не будут перенесены до тех пор, пока в XML-файлах, указываемых в командной строке LoadState, не будет указан эквивалентный компонент. Например, стандартный файл MigSys.xml содержит компоненты с параметрами type="System" и defaultSupported="FALSE". Если вы указываете этот файл в командной строке ScanState, то для переноса параметров его необходимо также указать в командной строке LoadState. Это связано с тем, что средство LoadState должно обнаружить эквивалентный компонент. Иными словами, компонент должен иметь одинаковое значение атрибута переноса urlid XML-файла и отображаемое имя, поскольку в противном случае средство LoadState не перенесет параметры из хранилища. Это удобно в случае, если исходный компьютер работает под управлением Windows XP и выполняется перенос на Windows Vista и Windows XP, поскольку для обоих конечных компьютеров можно использовать одно хранилище.

hidden

 

Этот параметр предназначен только для внутреннего использования средством миграции пользовательской среды.

 

Пример использования элемента см. в любом XML-файле переноса по умолчанию.

<condition>

Мы не рекомендуем использовать элемент <condition> в <detect>, <objectSet> и <addObjects> (хоть это и поддерживается). Возможно, этот элемент будет удален в будущих версиях средства миграции пользовательской среды, и вам потребуется переписывать сценарии. Если нужно использовать условие в элементах <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>

ПараметрОбязательныйЗначение

negation

Нет

(значение по умолчанию: 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 объединяются с помощью оператора OR, поскольку они находятся в одном разделе <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

    Функция IsNative64Bit возвращает значение TRUE, если процесс переноса выполняется как 64-разрядный процесс, т. е. процесс, запущенный на 64-разрядной системе без Windows on Windows (WOW). В противном случае функция возвращает значение FALSE.

  • IsOSLaterThan

    Все проверки выполняются с учетом регистра.

    Синтаксис: IsOSLaterThan("OSType","OSVersion")

    ПараметрОбязательныйЗначение

    OSType

    Да

    Может быть 9x или NT. Если OSType не совпадает с типом текущей операционной системы, то функция возвращает значение FALSE. Например, если текущая операционная система принадлежит к семейству Windows NT, а параметр OSType имеет значение "9x", то результатом будет FALSE.

    OSVersion

    Да

    Основной номер версии, дополнительный номер версии, номер сборки и номер редакции, разделенные точками. Например, 5.0.2600.Service Pack 1. Можно указать частичную спецификацию версии, но без шаблона. Например, 5.0.

    Функция IsOSLaterThan возвращает значение TRUE, если текущая операционная система имеет более позднюю или такую же версию, как OSVersion.

     

    Пример:

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

  • IsOSEarlierThan

    Все проверки выполняются с учетом регистра.

    Синтаксис: IsOSEarlierThan("OSType","OSVersion")

    ПараметрОбязательныйЗначение

    OSType

    Да

    Может быть 9x или NT. Если OSType не совпадает с типом текущей операционной системы, то функция возвращает значение FALSE. Например, если текущая операционная система принадлежит к семейству Windows NT, а параметр OSType имеет значение "9x", то результатом будет FALSE.

    OSVersion

    Да

    Основной номер версии, дополнительный номер версии, номер сборки и номер редакции, разделенные точками. Например, 5.0.2600.Service Pack 1. Можно указать частичную спецификацию версии, но без шаблона. Например, 5.0.

    Функция IsOSEarlierThan возвращает значение TRUE, если текущая операционная система имеет более раннюю версию, чем OSVersion.

     

Функции, предназначенные для объектов

  • DoesObjectExist

    Функция DoesObjectExist возвращает значение TRUE, если существует объект, соответствующий шаблону расположения. В противном случае функция возвращает значение FALSE. Шаблон расположения разворачивается перед перечислением.

    Синтаксис: DoesObjectExist("ObjectType","EncodedLocationPattern")

    ПараметрОбязательныйЗначение

    ObjectType

    Да

    Указывает тип объекта. Допустимые значения: File или Registry.

    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

    Функция IsFileVersionAbove возвращает значение TRUE, если версия файла больше чем VersionValue.

    Синтаксис: IsFileVersionAbove("EncodedFileLocation","VersionTag","VersionValue")

    ПараметрОбязательныйЗначение

    EncodedFileLocation

    Да

    Шаблон расположения для проверяемого файла. Можно использовать переменные среды.

    VersionTag

    Да

    Значение тега версии, которое будет проверяться.

    VersionValue

    Да

    Значение для сравнения. Шаблоны не поддерживаются.

     

  • IsFileVersionBelow

    Синтаксис: IsFileVersionBelow("EncodedFileLocation","VersionTag","VersionValue")

    ПараметрОбязательныйЗначение

    EncodedFileLocation

    Да

    Шаблон расположения для проверяемого файла. Можно использовать переменные среды.

    VersionTag

    Да

    Значение тега версии, которое будет проверяться.

    VersionValue

    Да

    Значение для сравнения. Шаблоны не поддерживаются.

     

  • IsSystemContext

    Функция IsSystemContext возвращает значение TRUE, если текущим контекстом является "System". В противном случае функция возвращает значение FALSE.

    Синтаксис: IsSystemContext()

  • DoesStringContentEqual

    Функция DoesStringContentEqual возвращает значение TRUE, если строковое представление указанного объекта совпадает с StringContent.

    Синтаксис: DoesStringContentEqual("ObjectType","EncodedLocation","StringContent")

    ПараметрОбязательныйЗначение

    ObjectType

    Да

    Указывает тип объекта. Допустимые значения: File или Registry.

    EncodedLocationPattern

    Да

    Закодированное расположение для изучаемого объекта. Можно указывать переменные среды.

    Строка

    Да

    Строка, которую необходимо найти.

     

    Пример:

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

    Функция DoesStringContentContain возвращает значение TRUE, если есть хотя бы одно вхождение StrToFind в строковом представлении объекта.

    Синтаксис: DoesStringContentContain("ObjectType","EncodedLocation","StrToFind")

    ПараметрОбязательныйЗначение

    ObjectType

    Да

    Указывает тип объекта. Допустимые значения: File или Registry.

    EncodedLocationPattern

    Да

    Закодированное расположение для изучаемого объекта. Можно указывать переменные среды.

    StrToFind

    Да

    Искомая строка в содержимом указанного объекта.

     

  • IsSameObject

    Функция IsSameObject возвращает значение TRUE, если указанные закодированные расположения разрешаются в один и тот же физический объект. В противном случае функция возвращает значение FALSE.

    Синтаксис: IsSameObject("ObjectType","EncodedLocation1","EncodedLocation2")

    ПараметрОбязательныйЗначение

    ObjectType

    Да

    Указывает тип объекта. Допустимые значения: File или Registry.

    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

    Да

    Указывает тип первого объекта. Допустимые значения: File или Registry.

    EncodedLocation1

    Да

    Закодированное расположение первого объекта. Можно указывать переменные среды.

    ObjectType2

    Да

    Указывает тип второго объекта. Допустимые значения: File или Registry.

    EncodedLocation2

    Да

    Закодированное расположение второго объекта. Можно указывать переменные среды.

     

  • IsSameStringContent

    Функция IsSameStringContent возвращает значение TRUE, если указанные объекты имеют одинаковое содержимое. В противном случае функция возвращает значение FALSE. Содержимое интерпретируется как строка.

    Синтаксис: IsSameStringContent("ObjectType1","EncodedLocation1","ObjectType2","EncodedLocation2")

    ПараметрОбязательныйЗначение

    ObjectType1

    Да

    Указывает тип первого объекта. Допустимые значения: File или Registry.

    EncodedLocation1

    Да

    Закодированное расположение первого объекта. Можно указывать переменные среды.

    ObjectType2

    Да

    Указывает тип второго объекта. Допустимые значения: File или Registry.

    EncodedLocation2

    Да

    Закодированное расположение второго объекта. Можно указывать переменные среды.

     

<conditions>

Элемент <conditions> возвращает логическое значение, которое используется для задания условий оценки родительского элемента. Средство миграции пользовательской среды оценивает дочерние элементы и затем объединяет их результаты с помощью операторов AND или OR согласно параметру operation.

Синтаксис:

<conditions operation="AND|OR">

</conditions>

ПараметрОбязательныйЗначение

operation

Нет (значение по умолчанию: 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> можно указать список шаблонов объектов, получаемых с исходного компьютера. Оценивается каждый элемент <objectSet>, заданный в <content>. Объекты, соответствующие каждому списку шаблонов результирующих объектов, перечисляются, а затем к содержимому объектов применяется фильтр, заданный с помощью параметра filter. Выходными данными элемента <content> является результирующий массив строк. Сценарий фильтра возвращает массив расположений. Родительский элемент <objectSet> может содержать несколько дочерних элементов <content>.

  • Число экземпляров: неограниченное

  • Родительские элементы:<objectSet>

  • Дочерние элементы:<objectSet>

  • Вспомогательные функции. С этим элементом можно использовать следующие функции <content>: ExtractSingleFile, ExtractMultipleFiles и ExtractDirectory.

Синтаксис:

<content filter="ScriptInvocation">

</content>

ПараметрОбязательныйЗначение

filter

Да

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , MyScripts.AScript ("Arg1","Arg2").

Сценарий вызывается для каждого объекта, перечисляемого наборами объектов в правиле <include>. Сценарий фильтра возвращает логическое значение. Если возвращается значение TRUE, объект будет перенесен. Если возвращается значение FALSE, объект не будет перенесен.

 

Функции <content>

Следующие функции создают шаблоны вне содержимого объекта. Эти функции вызываются для каждого объекта, перечисляемого родительским элементом <ObjectSet>.

  • ExtractSingleFile

    Если в реестре задано мультистроковое значение, обрабатывается только первый сегмент. Возвращаемый шаблон — это закодированное расположение файла, который должен существовать в системе. Если в значении реестра указана правильная спецификация, но файл не существует, функция возвращает значение NULL.

    Синтаксис: ExtractSingleFile(Separators,PathHints)

    ПараметрОбязательныйЗначение

    Separators

    Да

    Список допустимых разделителей, которые можно использовать после спецификации файла в этом значении реестра. Например, для содержимого "C:\Windows\Notepad.exe,-2" разделителем является запятая. Можно указать значение NULL.

    PathHints

    Да

    Список дополнительных путей, разделенных точкой с запятой (;), в которых функция будет искать файл, соответствующий текущему содержимому. Например, в случае содержимого "Notepad.exe" и переменной среды %Path% функция найдет файл Notepad.exe в папке %windir% и вернет значение "c:\Windows [Notepad.exe]". Можно указать значение NULL.

     

    Пример:

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

    и

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

    Функция ExtractMultipleFiles возвращает несколько шаблонов, то есть по одному для каждого файла, найденного в содержимом указанного значения реестра. Если в реестре задано мультистроковое значение, разделитель мультистрокового значения считается разделителем по умолчанию. Следовательно, для мультистрокового значения аргумент <Разделители> должен иметь значение NULL.

    Возвращаемые шаблоны — это закодированные расположения файлов, которые должны существовать на исходном компьютере. Если в значении реестра указана правильная спецификация, но файл не существует, он не будет включен в конечный список.

    Синтаксис: ExtractMultipleFiles(Separators,PathHints)

    ПараметрОбязательныйЗначение

    Separators

    Да

    Список допустимых разделителей, которые можно использовать после спецификации файла в этом значении реестра. Например, для содержимого "C:\Windows\Notepad.exe,-2" разделителем является запятая. При обработке мультистроковых значений реестра этот параметр должен иметь значение NULL.

    PathHints

    Да

    Список дополнительных путей, разделенных точкой с запятой (;), в которых функция будет искать файл, соответствующий текущему содержимому. Например, в случае содержимого "Notepad.exe" и переменной среды %Path% функция найдет файл Notepad.exe в папке %windir% и вернет значение "c:\Windows [Notepad.exe]". Можно указать значение NULL.

     

  • ExtractDirectory

    Функция ExtractDirectory возвращает шаблон, т. е. закодированное расположение папки, которая должна существовать на исходном компьютере. Если в значении реестра указана правильная спецификация, но папка не существует, функция возвращает значение NULL. Если обрабатывается мультистроковое значение реестра, обрабатывается только первый сегмент.

    Синтаксис: ExtractDirectory(Separators,LevelsToTrim,PatternSuffix)

    ПараметрОбязательныйЗначение

    Separators

    Нет

    Список допустимых разделителей, которые можно использовать после спецификации файла в этом значении реестра. Например, для содержимого "C:\Windows\Notepad.exe,-2" разделителем является запятая. При обработке мультистроковых значений реестра этот параметр должен иметь значение 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>

ПараметрОбязательныйЗначение

script

Да

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , MyScripts.AScript ("Arg1","Arg2").

Сценарий вызывается для каждого объекта, перечисляемого наборами объектов в правиле <include>. Сценарий фильтра возвращает логическое значение. Если возвращается значение TRUE, объект будет перенесен. Если возвращается значение FALSE, объект не будет перенесен.

 

Функции <contentModify>

Следующие функции изменяют содержимое объектов при переносе. Эти функции вызываются для каждого объекта, перечисляемого родительским элементом <ObjectSet>.

  • ConvertToDWORD

    Функция ConvertToDWORD преобразует содержимое значений реестра, перечисляемых родительским элементом <ObjectSet>, в двойное слово. Например, функция ConvertToDWORD преобразует строку "1" в двойное слово 0x00000001. Если преобразование завершается с ошибкой, то используется значение, заданное с помощью параметра <Значение_при_возникновении_ошибки>.

    Синтаксис: ConvertToDWORD(DefaultValueOnError)

    ПараметрОбязательныйЗначение

    DefaultValueOnError

    Нет

    Значение, которое будет присвоено параметру, если преобразование завершится с ошибкой. Если указано значение NULL, то при сбое преобразования будет записано значение 0.

     

  • ConvertToString

    Функция ConvertToString преобразует содержимое значений реестра, которые соответствуют родительскому элементу <ObjectSet>, в строку. Например, двойное слово 0x00000001 будет преобразовано в строку "1". Если преобразование завершается с ошибкой, то используется значение, заданное с помощью параметра <Значение_при_возникновении_ошибки>.

    Синтаксис: ConvertToString(DefaultValueOnError)

    ПараметрОбязательныйЗначение

    DefaultValueOnError

    Нет

    Значение, которое будет присвоено параметру, если преобразование завершится с ошибкой. Если указано значение NULL, то при сбое преобразования будет записано значение 0.

     

    Пример:

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

    Функция ConvertToBinary преобразует содержимое значений реестра, которые соответствуют родительскому элементу <ObjectSet>, в двоичное значение.

    Синтаксис: ConvertToBinary ()

  • OffsetValue

    Функция OffsetValue прибавляет или вычитает Value из значения переносимого объекта и затем записывает полученный результат обратно в реестр на конечном компьютере. Например, если переносимый объект имеет тип DWORD со значением 14, а значение Value равно "-2", то в значение реестра на конечном компьютере будет записано 12.

    Синтаксис: OffsetValue(Value)

    ПараметрОбязательныйЗначение

    Value

    Да

    Строковое представление числового значения. Может быть положительным или отрицательным. Например, OffsetValue(2).

     

  • SetValueByTable

    Функция SetValueByTable сравнивает значения с исходного компьютера со значениями в исходной таблице. Если значение присутствует, то применяется эквивалентное значение из конечной таблицы. Если значения нет либо в конечной таблице нет эквивалентного значения, будет применено DefaultValueOnError.

    Синтаксис: SetValueByTable(SourceTable,DestinationTable,DefaultValueOnError)

    ПараметрОбязательныйЗначение

    SourceTable

    Да

    Список значений, разделенных запятыми, которые допустимы для значений реестра исходного компьютера.

    DestinationTable

    Нет

    Список значений на конечном компьютере, разделенных запятыми.

    DefaultValueOnError

    Нет

    Значение, которое будет применяться к конечному компьютеру, если либо 1) значение на исходном компьютере не соответствует SourceTable, либо 2) DestinationTable не имеет эквивалентного значения.

    Если параметр <Значение_при_возникновении_ошибки> имеет значение NULL, то на конечном компьютере значение не изменяется.

     

  • KeepExisting

    Функция KeepExisting используется при возникновении конфликтов на конечном компьютере. Эта функция сохраняет (не перезаписывает) указанные атрибуты объекта, который находится на конечном компьютере.

    Синтаксис: KeepExisting("OptionString","OptionString","OptionString",...)

    ПараметрОбязательныйЗначение

    OptionString

    Да

    OptionString может быть Security, TimeFields или FileAttrib:Letter. Можно указать по одному типу OptionStrings. Не указывайте несколько OptionStrings с одинаковыми значениями. В противном случае будет применен параметр, занимающий крайнее правое положение. Например, не указывайте ("FileAttrib:H", "FileAttrib:R"), поскольку учитываться будет только атрибут Read-only (только чтение). Вместо этого задайте ("FileAttrib:HR"), и на конечном компьютере будут оставлены оба атрибута: Hidden и Read-only.

    • Security. Сохраняет дескриптор безопасности конечного объекта (если таковой есть).

    • TimeFields. Сохраняет метки времени конечного объекта. Этот параметр предназначен только для файлов.

    • FileAttrib:Letter. Сохраняет значение атрибута конечного объекта (ON или OFF) для указанного набора атрибутов файлов. Этот параметр предназначен только для файлов. Значения вводятся с учетом регистра, но с USMT игнорирует недопустимые и повторяющиеся значения, а также значения с пробелом после "FileAttrib:". Можно указать любую комбинацию следующих атрибутов:

      • A = архив

      • C = со сжатием

      • E = зашифровано

      • H = скрытый

      • I = без индексированного содержимого

      • O = вне сети

      • R = только чтение

      • S = системный

      • T = временный

     

  • MergeMultiSzContent

    Функция MergeMultiSzContent объединяет мультистроковое содержимое значений реестра, перечисляемых родительским элементом <ObjectSet>, с содержимым эквивалентных значений реестра, которые уже присутствуют на конечном компьютере. Instruction и String или удаляют содержимое из мультистрокового значения, или добавляют в него. Повторяющиеся элементы удаляются.

    Синтаксис: MergeMultiSzContent(Instruction,String,Instruction,String,...)

    ПараметрОбязательныйЗначение

    Instruction

    Да

    Данный параметр может принимать одно из следующих значений:

    • Add. Добавляет соответствующую строку в мультистроковое значение, если она отсутствует.

    • Remove. Удаляет соответствующую строку из мультистрокового значения.

    String

    Да

    Строка, которую необходимо добавить или удалить.

     

  • MergeDelimitedContent

    Функция MergeDelimitedContent объединяет содержимое значений реестра, перечисляемых родительским элементом <ObjectSet>, с содержимым эквивалентных значений реестра, которые уже присутствуют на конечном компьютере. Значения представлены в виде списка элементов, разделенных символом, который задан с помощью параметра <Разделители>. Повторяющиеся элементы удаляются.

    Синтаксис: MergeDelimitedContent(Delimiters,Instruction,String,...)

    ПараметрОбязательныйЗначение

    Delimiters

    Да

    Один символ, который используется для разделения содержимого обрабатываемого объекта. Содержимое представляется в виде списка элементов, разделенных Delimiters.

    Например, для разделения строк используется точка ".".

    Instruction

    Да

    Данный параметр может принимать одно из следующих значений:

    • Add. Добавляет строку String в мультистроковое значение, если она отсутствует.

    • Remove. Удаляет String из мультистрокового значения.

    String

    Да

    Строка, которую необходимо добавить или удалить.

     

<description>

Элемент <description> задает описание компонента. Этот элемент не влияет на перенос.

  • Число экземпляров: ноль или один

  • Родительские элементы:<component>

  • Дочерние элементы: нет

Синтаксис:

<description>ComponentDescription</description>

ПараметрОбязательныйЗначение

ComponentDescription

Да

Описание компонента.

 

В следующем примере показано, как элемент <description> задает описание "My custom component".

<description>My custom component<description>

<destinationCleanup>

Элемент <destinationCleanup> удаляет объекты (например, файлы и разделы реестра) на конечном компьютере перед применением объектов с исходного компьютера. Этот элемент оценивается только в том случае, если на конечном компьютере запущена программа LoadState. Следовательно, программа ScanState игнорирует этот элемент.

Важно  

При использовании этого элемента соблюдайте меры предосторожности, поскольку он удаляет объекты с конечного компьютера.

 

Для одного элемента <destinationCleanup> можно указать несколько элементов <objectSet>. Обычно этот элемент используется в случае, если на исходном компьютере отсутствует раздел реестра и необходимо убедиться, что компонент перенесен. В этом случае можно удалить все разделы реестра компонента перед переносом разделов реестра с исходного компьютера. Это позволяет гарантировать, что если на исходном компьютере раздел реестра отсутствует, то его не будет и на конечном компьютере.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Дочерние элементы:<objectSet> (обратите внимание, что на конечном компьютере все дочерние элементы будут удалены).

Синтаксис:

<destinationCleanup filter=ScriptInvocation>

</destinationCleanup>

ПараметрОбязательныйЗначение

filter

Да

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , MyScripts.AScript ("Arg1","Arg2").

Сценарий вызывается для каждого объекта, перечисляемого наборами объектов в правиле <include>. Сценарий фильтра возвращает логическое значение. Если возвращается значение 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>. Возможно, он будет удален в будущих версиях средства миграции пользовательской среды. В этом случае вам придется переписывать сценарии. Вместо этого рекомендуем использовать элемент <detection>.

Элемент <detect> позволяет определить, присутствует ли компонент в системе. Элемент <detect> возвращает значение TRUE, если все его дочерние элементы <detect> возвращают значение TRUE. Если хотя бы один дочерний элемент возвращает значение FALSE, то родительский элемент <detect> возвращает значение FALSE. Если раздел элемента <detect> отсутствует, то средство миграции пользовательской среды предполагает, что компонент присутствует.

В каждом элементе <detect> может быть несколько дочерних элементов <condition> или <objectSet>, которые будут логически объединены оператором OR. Если хотя бы один элемент <condition> или <objectSet> возвращает значение TRUE, то элемент <detect> также возвращает значение TRUE.

  • Число экземпляров: неограниченное

  • Родительские элементы: <detects>, <namedElements>

  • Обязательные дочерние элементы:<condition>

  • Необязательные дочерние элементы:<objectSet>

Синтаксис:

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

</detect>

ПараметрОбязательныйЗначение

name

Да, если элемент <detect> является дочерним по отношению к <namedElements>

Нет, если элемент <detect> является дочерним по отношению к <detects>

Если указан параметр ID, то дочерние элементы обрабатываться не будут. Вместо них обрабатываются все элементы <detect> с именем, объявленным в элементе <namedElements>.

context

Нет

(значение по умолчанию: UserAndSystem)

Определяет область действия этого параметра, то есть указывает, следует ли обрабатывать этот компонент в контексте конкретного пользователя, в контексте всей операционной системы или в обоих контекстах.

Максимальная область действия задается с помощью элемента <component>. Например, если элемент <component> содержит параметр context со значением User, а элемент <rules> содержит параметр context со значением UserAndSystem, то элемент <rules> будет реагировать так, как если бы его параметру context было присвоено значение User. Если элемент <rules> содержит параметр context со значением System, он будет проигнорирован.

  • User. Оценивает переменные для каждого пользователя.

  • System. Оценивает переменные только один раз в контексте системы.

  • UserAndSystem. Оценивает переменные для всей операционной системы и каждого пользователя.

 

Смотрите примеры для <detection>.

<detects>

Мы не рекомендуем использовать элемент <detects>. Возможно, этот элемент будет удален в будущих версиях средства миграции пользовательской среды, и вам потребуется переписывать сценарии. Вместо этого рекомендуется использовать элемент <detection>, если в качестве родительского элемента выступает <role> или <namedElements>, и мы советуем применять элемент <conditions>, если родительским элементом является <rules>. Элемент <detection> позволяет более четко описывать сложные логические выражения.

Элемент <detects> — это контейнер для одного или нескольких элементов <detect>. Элемент <detects> возвращает значение TRUE, если все его дочерние элементы <detect> возвращают значение TRUE. Если хотя бы один дочерний элемент <detect> возвращает значение FALSE, родительский элемент <detects> возвращает значение FALSE. Если вы не хотите использовать элементы <detects> в <component>, то создайте элемент <detects> в элементе <namedElements> и используйте ссылку на него. Если раздел элемента <detects> отсутствует, то средство миграции пользовательской среды предполагает, что компонент присутствует. Результаты оценки каждого элемента <detects> объединяются с помощью оператора OR, чтобы создать правило, используемое для обнаружения родительского элемента.

Синтаксис:

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

</detects>

  • Число экземпляров: неограниченное

  • Родительские элементы:<role>, <rules>, <namedElements>

  • Обязательные дочерние элементы: <detect>

ПараметрОбязательныйЗначение

name

Да, если элемент <detects> является дочерним по отношению к <namedElements>

Нет, если элемент <detects> является дочерним по отношению к <role> или <rules>

Если указан параметр ID, дочерние элементы <detect> обрабатываться не будет. Вместо них обрабатываются все элементы <detects> с именем, объявленным в элементе <namedElements>.

context

Нет

(значение по умолчанию: UserAndSystem)

Определяет область действия этого параметра, то есть указывает, следует ли обрабатывать этот компонент в контексте конкретного пользователя, в контексте всей операционной системы или в обоих контекстах.

Максимальная область действия задается с помощью элемента <component>. Например, если элемент <component> содержит параметр context со значением User, а элемент <rules> содержит параметр context со значением UserAndSystem, то параметр context элемента <rules> будет переопределен значением User. Если элемент <rules> содержит параметр context со значением System, он будет проигнорирован.

  • User. Оценивает переменные для каждого пользователя.

  • System. Оценивает переменные только один раз в контексте системы.

  • UserAndSystem. Оценивает переменные для всей операционной системы и каждого пользователя.

Для элементов <detects>, расположенных в <rules>, параметр context игнорируется.

 

Ниже приведен пример из файла 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>. Результат элемента <detection> определяется результатом оценки дочерних элементов <condition>, расположенных в элементе <conditions>. Например, элемент <detection> возвращает значение TRUE, если все дочерние элементы <conditions> в элементе <detection> возвращают значение TRUE. Если хотя бы один дочерний элемент <conditions> возвращает значение FALSE, то элемент <detection> возвращает значение FALSE.

Кроме того, результаты каждого раздела <detection> в элементе <role> объединяются с помощью оператора OR для формирования правила обнаружения родительского элемента. Таким образом, если один из разделов <detection> возвращает значение TRUE, элемент <role> обрабатывается. В противном случае элемент <role> не обрабатывается.

Используйте элемент <detection> в <namedElements>, если не требуется описывать его в элементе <component>. Затем добавьте раздел <detection> в элемент <role>, чтобы управлять переносом компонента. Если для компонента не задан раздел <detection>, то средство миграции пользовательской среды предполагает, что компонент присутствует.

  • Число экземпляров: неограниченное

  • Родительские элементы:<role>, <namedElements>

  • Дочерние элементы:<conditions>

Синтаксис:

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

</detection>

ПараметрОбязательныйЗначение

name

  • Да, если элемент <detection> объявлен в <namedElements>

  • Нет, если элемент объявлен в <role>

Если элемент объявлен, содержимое элемента <detection> игнорируется, а содержимое элемента <detection> с аналогичным именем, объявленным в элементе <namedElements>, обрабатывается.

context

Нет (значение по умолчанию: 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>

Элемент <displayName> является обязательным для каждого элемента <component>.

  • Число вхождений. По одному для каждого компонента.

  • Родительские элементы:<component>

  • Дочерние элементы: нет

Синтаксис:

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

ПараметрОбязательныйЗначение

locID

Нет

Этот параметр предназначен для внутреннего использования средством миграции пользовательской среды. Не используйте этот параметр.

ComponentName

Да

Имя компонента.

 

Пример:

<displayName>Command Prompt settings</displayName>

<environment>

Элемент <environment> – это контейнер для элементов <variable>, в которых можно задать переменные для XML-файла. Все переменные среды, заданные таким способом, являются частными. Иными словами, они будут доступны только дочерним компонентам и компоненту, в котором они заданы. См. два примера сценариев в примерах.

  • Число экземпляров: неограниченное

  • Родительские элементы:<role>, <component>, <namedElements>

  • Обязательные дочерние элементы:<variable>

  • Необязательные дочерние элементы:conditions

Синтаксис:

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

</environment>

ПараметрОбязательныйЗначение

name

Да, если элемент <environment> является дочерним по отношению к <namedElements>

Нет, если элемент <environment> является дочерним по отношению к <role> или <component>

Когда элемент объявлен в качестве дочернего элемента для элемента <role> или <component> и если объявлен параметр ID, средство миграции пользовательской среды игнорирует содержимое элемента <environment> и обрабатывает содержимое элемента <environment> с тем же именем, объявленным в элементе <namedElements>.

context

Нет

(значение по умолчанию: UserAndSystem)

Определяет область действия этого параметра, то есть указывает, следует ли обрабатывать этот компонент в контексте конкретного пользователя, в контексте всей операционной системы или в обоих контекстах.

Максимальная область действия задается с помощью элемента <component>. Например, если элемент <component> содержит параметр context со значением User, а элемент <rules> содержит параметр context со значением UserAndSystem, то параметр context элемента <rules> будет переопределен значением User. Если элемент <rules> содержит параметр context со значением System, он будет проигнорирован.

  • User. Оценивает переменные для каждого пользователя.

  • System. Оценивает переменные только один раз в контексте системы.

  • UserAndSystem. Оценивает переменные для всей операционной системы и каждого пользователя.

 

Пример 1.

В этом сценарии вы хотите создавать расположение объектов во время выполнения в зависимости от конфигурации конечного компьютера. Например, это может потребоваться в случае, если приложение записывает данные в папку установки, а пользователи могут устанавливать приложение на любом диске компьютера. Если приложение записывает значение реестра hklm\software\companyname\install [путь] и затем записывает в него расположение установки, единственный способ правильного переноса данных заключается в определении переменной среды. Пример:

<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\ [путь].

<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.

В этом сценарии вы хотите перенести 5 файлов File1.txt, File2.txt и т. д. из папки %SYSTEMDRIVE%\data\userdata\dir1\dir2\. Для этого вам потребуется использовать в 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>

Вместо ввода 5 путей к файлам можно создать переменную расположения, как показано ниже.

<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>

Элемент <exclude> указывает, какие объекты не подлежат переносу до тех пор, пока в разделе <include> не будут указаны более строгие правила переноса. Если для одного объекта заданы элементы <include> и <exclude>, объект будет перенесен. Для одного элемента <exclude> можно указать несколько дочерних элементов <objectSet>.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Дочерние элементы:<objectSet>

  • Вспомогательные функции. С этим элементом можно использовать следующие функции фильтрации <exclude>: CompareStringContent, IgnoreIrrelevantLinks, AnswerNo, NeverRestore и SameRegContent.

Синтаксис:

<exclude filter="ScriptInvocation">

</exclude>

ПараметрОбязательныйЗначение

filter

Нет

(значение по умолчанию: No)

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , MyScripts.AScript ("Arg1","Arg2").

Сценарий вызывается для каждого объекта, перечисляемого наборами объектов в правиле <include>. Сценарий фильтра возвращает логическое значение. Если возвращается значение 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>

ПараметрОбязательныйЗначение

attributes

Да

Указывает атрибуты, которые необходимо исключить. Можно указать один атрибут или оба (разделенные кавычками), например "Security","TimeFields":

  • Security может принимать значения Owner, Group, DACL или SACL.

  • TimeFields может принимать значения CreationTime, LastAccessTime или LastWrittenTime

 

Пример:

<migration urlid="http://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>

ПараметрОбязательныйЗначение

when

Да

Указывает момент запуска командной строки. Этот параметр может принимать одно из следующих значений.

  • pre-scan перед запуском процесса сканирования.

  • scan-success после успешного завершения процесса сканирования.

  • post-scan после завершения процесса сканирования независимо от его успешности.

  • pre-apply перед началом процесса применения.

  • apply-success после успешного выполнения процесса применения.

  • post-apply после завершения процесса применения независимо от его успешности.

 

Пример использования элемента <externalProcess> см. в примере для <excludeAttributes>.

<icon>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<include>

Элемент <include> используется для указания переносимых объектов, если отсутствует более строгое правило <exclude>. Чтобы указать более конкретные элементы, можно использовать сценарий. Для одного элемента <include> можно указать несколько элементов <objectSet>.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Обязательный дочерний элемент:<objectSet>

  • Вспомогательные функции. С этим элементом можно использовать следующие функции фильтрации <include>: CompareStringContent, IgnoreIrrelevantLinks, AnswerNo и NeverRestore.

Синтаксис:

<include filter="ScriptInvocation">

</include>

ПараметрОбязательныйЗначение

filter

Нет.

Если этот параметр не указан, то обрабатываются все шаблоны, расположенные в дочернем элементе <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

    Да

    Строка. Может принимать следующие значения.

    • Equal (с учетом регистра). Функция возвращает значение TRUE, если строковое представление текущего объекта, обрабатываемого модулем переноса, равно StringContent.

    • NULLили любое другое значение. Функция возвращает значение TRUE, если строковое представление текущего объекта, обрабатываемого модулем переноса, не равно StringContent.

     

  • 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>

ПараметрОбязательныйЗначение

attributes

Да

Указывает атрибуты, добавляемые при переносе объекта. Можно указать один атрибут или оба (разделенные кавычками), например "Security","TimeFields":

  • Этот параметр может принимать одно из следующих значений.

    • Owner. Владелец объекта (SID).

    • Group. Первичная группа объекта (SID).

    • DACL (список управления доступом на уровне пользователей). Список управления доступом, который формируется владельцем объекта и задает права доступа к объекту для конкретных пользователей или групп.

    • SACL (системный список управления доступом). Список управления доступом, который контролирует создание сообщений аудита при попытках доступа к защищаемому объекту. Как правило, задавать системный список управления доступом объекта могут только системные администраторы.

  • Параметр TimeFields может принимать одно из следующих значений.

    • CreationTime. Указывает время создания файла или каталога.

    • LastAccessTime. Указывает время последней операции чтения, записи файла или (в случае исполняемого файла) время запуска.

    • LastWrittenTime. Указывает время последней операции записи, усечения или перезаписи файла.

 

Пример использования элемента <includeAttributes> см. в примере для <excludeAttributes>.

<library>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<location>

Элемент <location> задает расположение элемента <object>.

  • Число экземпляров: по одному на каждый <object>

  • Родительские элементы:<object>

  • Дочерние элементы:<script>

Синтаксис:

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

ПараметрОбязательныйЗначение

type

Да

typeID может иметь значение Registry или File.

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> используется для изменения расположения и имени объекта перед переносом на конечный компьютер. Элемент <locationModify> используется только в том случае, если на конечном компьютере запущена программа LoadState. Иными словами, этот элемент игнорируется программой ScanState. Элемент <locationModify> создает соответствующую папку на конечном компьютере, если она еще не создана.

Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Обязательный дочерний элемент:<objectSet>

  • Вспомогательные функции. С этим элементом можно использовать следующие функции <locationModify>: ExactMove, RelativeMove и Move.

Синтаксис:

<locationModify script="ScriptInvocation">

</locationModify>

ПараметрОбязательныйЗначение

script

Да

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , MyScripts.AScript ("Arg1","Arg2").

Сценарий вызывается для каждого объекта, перечисляемого наборами объектов в правиле <include>. Сценарий фильтра возвращает логическое значение. Если возвращается значение 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

    Функция ExactMove перемещает все объекты, соответствующие родительскому элементу <ObjectSet>, в заданный ObjectEncodedLocation. Эту функцию можно использовать для перемещения одного файла в другое расположение на конечном компьютере. Если расположение в месте назначения является узлом, то все соответствующие объекты источника будут записаны на узле без вложенных папок. Если расположение в месте назначения является конечным объектом, то модуль перенесет все соответствующие объекты источника в одно расположение. При возникновении конфликтов применяются обычные алгоритмы разрешения конфликтов.

    Синтаксис: ExactMove(ObjectEncodedLocation)

    ПараметрОбязательныйЗначение

    ObjectEncodedLocation

    Да

    Конечное расположение для всех исходных объектов.

     

    Пример:

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

    Функция Move перемещает объекты в другое расположение на конечном компьютере. Кроме того, эта функция создает вложенные папки, если длина имени исходного объекта превышает максимальную длину 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>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<manufacturer>

Элемент <manufacturer> задает изготовителя компонента. Этот элемент не влияет на перенос.

  • Число экземпляров: ноль или один

  • Родительские элементы:<component>

  • Дочерние элементы: нет

Синтаксис:

<manufacturer>Name</manufacturer>

ПараметрОбязательныйЗначение

Name

Да

Имя изготовителя компонента.

 

<merge>

Элемент <merge> указывает, что произойдет при обнаружении конфликта. Конфликт возникает в случае, если переносимый объект уже присутствует на конечном компьютере. Если этот элемент не указан, то по умолчанию значения реестра исходного компьютера перезаписывают значения конечного компьютера. Поведение по умолчанию для файлов — переименование исходного файла в формате "исходное_имя_файла(1).исходное_расширение". Этот элемент служит только для указания действия, выполняемого при обнаружении конфликта. Этот элемент не содержит объекты. Следовательно, для переносимых объектов вы должны указать правила <include> с элементом <merge>. Если конфликт обнаружен при обработке объекта, средство миграции пользовательской среды выбирает наиболее строгое правило <merge> и применяет его, чтобы устранить конфликт. Например, если имеется правило <merge> C:\* [*] для <sourcePriority> и правило <merge> C:\subfolder\* [*] для <destinationPriority>, то средство миграции пользовательской среды будет использовать правило <destinationPriority>, поскольку оно является более строгим.

Пример этого элемента см. в разделе Конфликты и приоритет.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Обязательный дочерний элемент:<objectSet>

  • Вспомогательные функции. С этим элементом можно использовать следующие функции <merge>: SourcePriority, DestinationPriority, FindFilePlaceByPattern, LeafPattern, NewestVersion, HigherValue() и LowerValue().

Синтаксис:

<merge script="ScriptInvocation">

</merge>

ПараметрОбязательныйЗначение

script

Да

Сценарий с любым числом строковых аргументов, разделенных запятыми и заключенных в скобки. Например, , 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 имеет версию 1 и этот же файл на конечном компьютере имеет версию 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 каждого файла, указываемого в командной строке, должен быть уникальным. Это связано с тем, что средство миграции пользовательской среды определяет компоненты в файле с помощью 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="http://www.microsoft.com/migration/1.0/migxmlext/migapp">
</migration>

MigXMLHelper.FileProperties

Эта вспомогательная функция фильтрации может использоваться для фильтрации переноса файлов на основании атрибутов размера файла и даты.

Вспомогательная функцияMigXMLHelper.FileProperties (property, operator, valueToCompare)

Property

filesize, dateCreated, dateModified, dateAccessed

Operator

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>

Пример использования этого элемента см. в файле 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> оценивает пустой набор. Для одного родительского элемента <include> может использовать несколько элементов <objectSet>.

Синтаксис:

<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>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<paths>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<pattern>

Этот элемент можно использовать для указания нескольких объектов. Если вы укажите несколько элементов <pattern> для каждого элемента <objectSet>, то они будут объединены. Если вы указываете файлы, то вместо этого элемента используйте функцию GenerateDrivePatterns в элементе <script>. Функция 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>

ПараметрОбязательныйЗначение

type

Да

typeID может иметь значение Registry, File или Ini. Если typeId имеет значение Ini, то нельзя использовать пробел между Path и object. Следующий пример является правильным для type="Ini":

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

Path [object]

Да

Допустимый шаблон реестра или пути к файлу с пробелом и квадратными скобками [], в которых указан переносимый объект.

  • Path может содержать подстановочный знак "звездочка" (*) или может являться распознаваемой переменной среды. В качестве подстановочного знака нельзя применять вопросительный знак. Чтобы указать разделы реестра HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE, можно использовать HKCU и HKLM соответственно.

  • Object может содержать подстановочный знак "звездочка" (*). Однако в качестве подстановочного знака нельзя использовать вопросительный знак. Пример:

    C:\Folder\ [*] перечисляет все файлы в каталоге C:\Path, но без вложенных папок C:\Folder.

    C:\Folder\* [*] перечисляет все файлы и вложенные папки в C:\Folder.

    C:\Folder\ [*.mp3] перечисляет все MP3-файлы в C:\Folder.

    C:\Folder\ [Sample.doc] перечисляет только файл Sample.doc, расположенный в C:\Folder.

    Примечание  

    Если в имени переносимого файла содержится символ квадратной скобки ([ или ]), то непосредственно перед скобкой необходимо добавить надстрочный символ (^). Например, для файла "file].txt" следует указать <pattern type="File">c:\documents\mydocs [file^].txt]</pattern> вместо <pattern type="File">c:\documents\mydocs [file].txt]</pattern>.

     

 

Пример:

<processing>

Этот элемент можно использовать для запуска сценария в ходе процесса переноса. Обработка значений, возвращаемых сценарием, не поддерживается, поэтому если сценарий возвращает значения, то они будут проигнорированы.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Обязательный дочерний элемент:<script>

Синтаксис:

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

</processing>

ПараметрОбязательныйЗначение

when

Да

Указывает момент запуска сценария. Этот параметр может принимать одно из следующих значений.

  • pre-scan — перед запуском процесса сканирования.

  • scan-success — после успешного завершения процесса сканирования.

  • post-scan — после завершения процесса сканирования, независимо от того, был он успешным или нет.

  • pre-apply — перед началом процесса применения.

  • apply-success — после успешного выполнения процесса применения.

  • post-apply — после завершения процесса применения, независимо от того, был он успешным или нет.

 

<plugin>

Это внутренний элемент средства миграции пользовательской среды. Не используйте этот элемент.

<role>

Элемент <role> является обязательным для пользовательского XML-файла. С помощью элемента <role> можно создать конкретный компонент. В этом случае для определения компонента используются параметры, указанные на уровне <component>, и роль.

  • Число экземпляров: каждый <component> может содержать один, два или три дочерних элемента <role>.

  • Родительские элементы:<component>, <role>

  • Обязательные дочерние элементы:<rules>

  • Необязательные дочерние элементы:<environment>, <detection>, <component>, <role>, <detects>, <plugin>

Синтаксис:

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

</role>

ПараметрОбязательныйЗначение

role

Да

Задает роль для компонента. Может принимать следующие значения:

  • Container

  • Binaries

  • Settings

  • Data

Варианты действий

  1. Вы можете указать до трех элементов <role> в <component>: элемент роли "Binaries", элемент роли "Settings" и элемент роли "Data". Эти параметры не изменяют поведение переноса, а помогают вам классифицировать переносимые параметры. Можно использовать вложенные элементы <role>, однако все вложенные элементы должны иметь одну и ту же роль.

  2. Также можно указать один элемент "Container" <role> в элементе <component>. В этом случае нельзя указывать дочерние элементы <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 name="ID" context="User|System|UserAndSystem">

</rules>

ПараметрОбязательныйЗначение

name

Да, если элемент <rules> является дочерним по отношению к <namedElements>

Нет, если элемент <rules> является дочерним по отношению к любому другому элементу

Если указан параметр ID, то дочерние элементы обрабатываться не будут. Вместо них обрабатываются все элементы <rules> с таким же именем, объявленным в элементе <namedElements>.

context

Нет

(значение по умолчанию: UserAndSystem)

Определяет область действия этого параметра, то есть указывает, следует ли обрабатывать этот компонент в контексте конкретного пользователя, в контексте всей операционной системы или в обоих контекстах.

Максимальная область действия задается с помощью элемента <component>. Например, если элемент <component> содержит параметр context со значением User, а элемент <rules> содержит параметр context со значением UserAndSystem, то параметр context элемента <rules> будет переопределен значением User. Если элемент <rules> содержит параметр context со значением System, он будет проигнорирован.

  • 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>, неограниченное число для <processing> и <objectSet>

Родительские элементы:<objectSet>, <variable>, <processing>

Дочерние элементы: нет

Синтаксис и вспомогательные функции:

  • Общий синтаксис: <script>ScriptWithArguments</script>

  • Вы можете использовать GetStringContent, если элемент <script> размещен в <variable>.

    Синтаксис: <script>MigXmlHelper.GetStringContent("ObjectType","EncodedLocationPattern","ExpandContent")</script>

    Пример: <script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>

  • Вы можете использовать GenerateUserPatterns, если элемент <script> размещен в <objectSet>.

    Синтаксис: <script>MigXmlHelper.GenerateUserPatterns("ObjectType","EncodedLocationPattern","ProcessCurrentUser")</script>

    Пример: <script>MigXmlHelper.GenerateUserPatterns ("File","%USERPROFILE%\* [*.doc]", "FALSE")</script>

  • Вы можете использовать GenerateDrivePatterns, если элемент <script> размещен в <objectSet>.

    Синтаксис: <script>MigXmlHelper.GenerateDrivePatterns("PatternSegment","DriveType")</script>

    Пример: <script>MigXmlHelper.GenerateDrivePatterns("* [sample.doc]", "Fixed")</script>

  • Вы можете применять простые исполняемые сценарии с элементами <script> внутри элементов <processing>: 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">, то в качестве дочернего элемента сценария необходимо использовать допустимое расположение файла.

    Примечание  

    Если в имени переносимого файла содержится символ квадратной скобки ([ или ]), то непосредственно перед скобкой необходимо добавить надстрочный символ (^). Например, для файла "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> в <variable> можно использовать функцию GetStringContent. Эта функция возвращает строковое представление указанного объекта. В противном случае функция возвращает значение NULL. Для файлов эта функция всегда возвращает значение NULL.

    Синтаксис: GetStringContent("ObjectType","EncodedLocationPattern","ExpandContent")

    ПараметрОбязательныйЗначение

    ObjectType

    Да

    Тип объекта. Может принимать значение Registry или Ini (для INI-файлов).

    EncodedLocationPattern

    Да

    • Если объект имеет тип Registry, то шаблон закодированного расположения должен быть допустимым путем реестра. Например, HKLM\SOFTWARE\MyKey[].

    • Если объект имеет тип Ini, то для шаблона закодированного расположения необходимо использовать следующий формат:

      IniFilePath|SectionName[SettingName]

    ExpandContent

    Нет (значение по умолчанию: TRUE)

    Допустимые значения: TRUE или FALSE. Если параметр имеет значение FALSE, то указанное расположение не будет развернуто перед возвратом.

     

    Пример:

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

    Функция GenerateDrivePatterns просматривает все доступные диски и выбирает диск, который соответствует запрашиваемому типу диска. Далее функция объединяет выбранные диски с последней частью PatternSegment, чтобы сформировать полностью закодированный шаблон файла. Например, если PatternSegment задан как Path [file.txt], а DriveType имеет значение Fixed, то функция формирует шаблон C:\Path [file.txt] и другие шаблоны, если есть и другие жесткие диски, кроме C:. В этой функции нельзя использовать переменные среды. Функцию GenerateDrivePatterns можно использовать с элементами <script> внутри <objectSet> внутри <include> или <exclude>.

    Синтаксис: GenerateDrivePatterns("PatternSegment","DriveType")

    ПараметрОбязательныйЗначение

    PatternSegment

    Да

    Суффикс закодированного шаблона. Он будет объединен со спецификацией диска, например "c:\", для формирования полного закодированного шаблона файла. Пример: "* [*.doc]". PatternSegment не может быть переменной среды.

    DriveType

    Да

    Тип диска, для которого необходимо создать шаблоны. Может принимать следующие значения:

    • Fixed

    • CDROM

    • Removable

    • Remote

     

    Примеры использования этого элемента см. в файле 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

    Да

    Указывает тип объекта. Допустимые значения: File или Registry.

    EncodedLocationPattern

    Да

    Шаблон расположения. Можно использовать переменные среды.

    ProcessCurrentUser

    Да

    Допустимые значения: TRUE или FALSE. Указывает, требуется ли создавать шаблоны для текущего пользователя.

     

    Пример:

    Если при обработке средством миграции пользовательской среды пользователя A вызывается функция GenerateUserPattens('File','%userprofile% [*.doc]','FALSE'), то эта функция создаст шаблоны только для пользователей B и C. С помощью этой вспомогательной функции можно создавать сложные правила. Например, чтобы перенести все DOC-файлы (без переноса пользователя X), не нужно переносить DOC-файлы из профиля пользователя X.

    Ниже приведен пример кода для этого сценария. Первый элемент <rules> переносит все DOC-файлы с исходного компьютера, за исключением файлов, расположенных в папке C:\Documents and Settings. Вторые элементы <rules> переносят все DOC-файлы из папки C:\Documents and Settings, кроме файлов, расположенных в профилях других пользователей. Поскольку второй элемент <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

Эта вспомогательная функция вызывает средство поиска документов, которое выполняет поиск всех переносимых файлов в системе. Эту функцию можно вызывать в контексте System или User.

ПараметрОбязательныйЗначение

ScanProgramFiles

Нет (значение по умолчанию: FALSE)

Допустимые значения: TRUE или FALSE. Параметр ScanProgramFiles определяет, будет ли выполняться сканирование каталога Program Files для сбора зарегистрированных расширений имен файлов для известных приложений. Например, если параметр имеет значение TRUE, средство поиска найдет и перенесет все JPG-файлы в папке Photoshop, если расширение JPG зарегистрировано для Photoshop.

IncludePatterns

Нет (значение по умолчанию: TRUE)

Допустимые значения: TRUE или FALSE. TRUE создает шаблоны включения и может быть добавлено в элемент <include>. FALSE создает шаблоны исключения и может быть добавлено в элемент <exclude>.

SystemDrive

Нет (значение по умолчанию: 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>

Простые сценарии

Следующие сценарии не возвращают значения. Для элементов <script> в <processing> можно использовать следующие сообщения об ошибках.

  • 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, содержащий данные для указанной службы. Если имеются необязательные параметры, они будут переданы в API-интерфейс StartService. Дополнительные сведения см. на этом веб-сайте Майкрософт.

  • StopService (ServiceName). Останавливает службу, указанную в параметре ServiceName. ServiceName — это подраздел HKLM\System\CurrentControlSet\Services, содержащий данные для указанной службы.

  • SyncSCM(ServiceShortName). Считывает значение типа Start из раздела реестра (HKLM\System\CurrentControlSet\Services\ServiceShortName [Start]) после того, как оно было изменено модулем переноса, и затем синхронизирует диспетчер служб (SCM) с новым значением.

<text>

С помощью элемента <text> можно задать значение любой переменной среды, которая расположена в XML-файлах переноса.

  • Число экземпляров: один для каждого элемента <variable>.

  • Родительские элементы:<variable>

  • Дочерние элементы: нет.

Синтаксис:

<text>NormalText</text>

ПараметрЗначение

NormalText

Интерпретируется как обычный текст.

 

Пример:

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

<unconditionalExclude>

Элемент <unconditionalExclude> исключает из переноса указанные файлы и значения реестра независимо от остальных правил включения, заданных в любом XML-файле переноса или в файле Config.xml. Объекты, объявленные здесь, не будут перенесены, поскольку этот элемент имеет преимущество перед остальными правилами. Например, существуют явные правила <include> для добавления MP3-файлов. Если вы исключите их с помощью этого параметра, то MP3-файлы не будут перенесены.

Чтобы исключить все MP3-файлы с исходного компьютера, используйте этот элемент. Если вы архивируете папку C:\UserData с помощью другого метода, то исключите всю папку из переноса. При использовании этого элемента соблюдайте меры предосторожности. Если приложению потребуется файл, который исключен с помощью элемента <unconditionalExclude>, оно будет работать неправильно на конечном компьютере.

  • Число экземпляров: неограниченное

  • Родительские элементы:<rules>

  • Дочерние элементы:<objectSet>

Синтаксис:

<unconditionalExclude></unconditionalExclude>

Следующий XML-файл исключает все MP3-файлы из числа переносимых. Дополнительные примеры использования этого элемента см. в разделе Исключение файлов и параметров.

<migration urlid="http://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>

Для элемента <environment> элемент <variable> является обязательным. Для каждого элемента <variable> должен быть указан элемент <objectSet>, <script> или <text>. Содержимое элемента <variable> назначает текстовое значение переменной среды. Этот элемент имеет три параметра.

  1. Если элемент <variable> содержит элемент <text>, то значением <variable> будет значение элемента <text>.

  2. Если элемент <variable> содержит элемент <script> и сценарий возвращает ненулевую строку, то значение элемента <variable> будет результатом вызова сценария.

  3. Если элемент <variable> содержит элемент <objectSet> и при обработке элемента <objectSet> возвращается хотя бы один шаблон объекта, то значением элемента <variable> будет значение первого объекта, отвечающего шаблону результирующего объекта.

  • Число экземпляров: неограниченное

  • Родительские элементы:<environment>

  • Обязательные дочерние элементы: <text>, <script> или <objectSet>

Синтаксис:

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

</variable>

ПараметрОбязательныйЗначение

name

Да

ID — это имя в виде строкового значения, используемое для ссылки на переменную среды. Рекомендуется, чтобы ID начинался с имени компонента во избежание конфликтов с пространством имен. Например, если компонент имеет имя MyComponent и требуется переменная пути установки компонента, то можно указать MyComponent.InstallPath.

remap

Нет (значение по умолчанию: 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> предназначен только для внутреннего использования средством миграции пользовательской среды. Не используйте этот элемент.

Приложение

Указание расположений

  • Указание закодированных расположений. Закодированное расположение, которое используется во всех вспомогательных функциях, представляет собой однозначное строковое представление имени объекта. Оно состоит из узловой части, за которой следует имя конечного объекта, заключенное в квадратные скобки. Таким образом, всегда существует четкое разграничение узлов и конечных объектов.

    Например, файл 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\*[*].

Внутренние функции средства миграции пользовательской среды

Следующие функции предназначены только для внутреннего использования средством миграции пользовательской среды. Не используйте эти функции в XML-файле.

  • AntiAlias

  • ConvertScreenSaver

  • ConvertShowIEOnDesktop

  • ConvertToOfficeLangID

  • MigrateActiveDesktop

  • MigrateAppearanceUPM

  • MigrateDisplayCS

  • MigrateDisplaySS

  • MigrateIEAutoSearch

  • MigrateMouseUPM

  • MigrateSoundSysTray

  • MigrateTaskBarSS

  • SetPstPathInMapiStruc

Допустимые теги версий

Во вспомогательных функциях можно использовать следующие теги версий:

  • "CompanyName"

  • "FileDescription"

  • "FileVersion"

  • "nternalName"

  • "LegalCopyright"

  • "OriginalFilename"

  • "ProductName"

  • "ProductVersion"

Следующие теги версий содержат значения, которые можно сравнивать:

  • "FileVersion"

  • "ProductVersion"

Связанные разделы

Справочник по XML для средства миграции пользовательской среды

 

 

Показ: