Note

Because the tables in this topic are wide, you may need to adjust the width of its window.

In This Topic:

Example 1: Migrating an Unsupported Application

The following is a template for the sections that you need to migrate your application. The template is not functional on its own, but you can use it to write your own .xml file.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/migapp">
  <component type="Application">
	<!-- Name of the application -->
	<displayName>Some Application</displayName>
	<!-- Specify whether the environment variables exist in the context of user or system or both -->
	<environment context="System">
	<!-- Create the environment variables -->
	<variable name="myVar1">
		<!-- Simple text value assignment to a variable -->
		<text>value</text>
	</variable>
	<variable name="myAppExePath">
		<!-- Make a call to in-built helper function to get a value from a reg key and assign that value to the variable -->
		<script>MigXMLHelper.GetStringContent("Registry","HKLM\Software\MyApp\Installer [EXEPATH]")</script>
	</variable>
	</environment>
	<role role="Settings">
	<detects>
		<!-- All of these checks must be true for the component to be detected -->
		<detect>
		<!-- Make a call to in-built helper function to check if an object exists or not -->
		<condition>MigXMLHelper.DoesObjectExist("Registry","HKLM\Software\MyApp [win32_version]")</condition>
		</detect>
		<detect>
		<!-- Either of these checks must be true for the component to be detected -->
		<!-- Make a call to in-built helper function to check if a file version matches or not -->
		<condition>MigXMLHelper.DoesFileVersionMatch("%MyAppExePath%","ProductVersion","8.*")</condition>
		<condition>MigXMLHelper.DoesFileVersionMatch("%MyAppExePath%","ProductVersion","9.*")</condition>
		</detect>
	</detects>
	<!-- Describe the rules that will be executed during migration of this component and the context, whether user, system or both -->
	<rules context="User">
		<!-- Delete objects specified in the object set on the destination computer before applying source objects -->
		<destinationCleanup>
		<!-- Describe the pattern for the list of objects to be deleted -->
		<objectSet>
			<pattern type="Registry">HKCU\Software\MyApp\Toolbar\* [*]</pattern>
			<pattern type="Registry">HKCU\Software\MyApp\ListView\* [*]</pattern>
			<pattern type="Registry">HKCU\Software\MyApp [ShowTips]</pattern>
		</objectSet>
		</destinationCleanup>
		<!-- Specify which set of objects should be migrated -->
		<include>
		<!-- Describe the pattern for the list of objects to be included -->
		<objectSet>
			<pattern type="Registry">HKCU\Software\MyApp\Toolbar\* [*]</pattern>
			<pattern type="Registry">HKCU\Software\MyApp\ListView\* [*]</pattern>
			<pattern type="Registry">HKCU\Software\MyApp [ShowTips]</pattern>
		</objectSet>
		</include>
		<!-- Specify which set of objects should not be migrated -->
		<exclude>
		<!-- Describe the pattern for the list of objects to be excluded from migration -->
		<objectSet>
			<pattern type="Registry">HKCU\Software\MyApp [Display]</pattern>
		</objectSet>
		</exclude>
	</rules>
	</role>
  </component>
</migration>

Example 2: Migrating the My Videos Folder

The following is a custom .xml file named CustomFile.xml that migrates My Videos for all users, if the folder exists on the source computer.

Code Behavior
<condition>MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%")</condition>

Verifies that My Videos exists on the source computer.

<include filter='MigXmlHelper.IgnoreIrrelevantLinks()'>

Filters out the shortcuts in My Videos that do not resolve on the destination computer. This has no effect on files that are not shortcuts. For example, if there is a shortcut in My Videos on the source computer that points to C:\Folder1, that shortcut will be migrated only if C:\Folder1 exists on the destination computer. However, all other files, such as .mp3 files, migrate without any filtering.

<pattern type="File">%CSIDL_MYVIDEO%\* [*]</pattern>

Migrates My Videos for all users.

<?xml version="1.0" encoding="UTF-8"?>
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/CustomFile">
<component type="Documents" context="User">
		<displayName>My Video</displayName>
		<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>
		 </rules>
		</role>
	</component>
</migration>

Example 3: Migrating Files and Registry Keys

This table describes the behavior in the following example .xml file.

Code Behavior
<pattern type="File">%ProgramFiles%\USMTTestFolder\* [USMTTestFile.txt]</pattern>

Migrates all instances of the file Usmttestfile.txt from all sub-directories under %ProgramFiles%\USMTTestFolder.

<pattern type="File">%ProgramFiles%\USMTDIRTestFolder\* [*]</pattern>

Migrates the whole directory under %ProgramFiles%\USMTDIRTestFolder.

<pattern type="Registry">HKCU\Software\USMTTESTKEY\* [MyKey]</pattern>

Migrates all instances of MyKey under HKCU\Software\USMTTESTKEY.

<pattern type="Registry">HKLM\Software\USMTTESTKEY\* [*]</pattern>

Migrates the entire registry hive under HKLM\Software\USMTTESTKEY.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/testfilemig">
  <component type="Application" context="System">
   <displayName>File Migration Test</displayName>
   <role role="Data">
	<rules context="System">
	 <include>
	<objectSet>
		<pattern type="File">%ProgramFiles%\USMTTestFolder\* [USMTTestFile.txt]</pattern>
		<pattern type="File">%ProgramFiles%\USMTDIRTestFolder\* [*]</pattern>
	</objectSet>
	</include>
   </rules>
  </role>
</component>
<component type="System">
  <displayName>Registry Migration Test</displayName>
  <role role="Settings">
   <rules context="UserAndSystem">
	 <include>
	<objectSet>
		<pattern type="Registry">HKCU\Software\USMTTESTKEY\* [MyKey]</pattern>
		<pattern type="Registry">HKLM\Software\USMTTESTKEY\* [*]</pattern>
	</objectSet>
	 </include>
   </rules>
  </role>
 </component>
</migration>

Example 4: Migrating Specific Folders from Various Locations

The behavior for this custom .xml file is described within the <displayName> tags in the code.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">

<component type="Documents" context="System">
  <displayName>Component to migrate all Engineering Drafts subfolders without documents in this folder </displayName>
  <role role="Data">
	<rules>
		 <include>
			<objectSet>
				 <pattern type="File"> C:\EngineeringDrafts\* [*]</pattern>
			</objectSet>
		</include>
		 <exclude>
			<objectSet>
				 <pattern type="File"> C:\EngineeringDrafts\ [*]</pattern>
			</objectSet>
		 </exclude>
	</rules>
  </role>
</component>

<component type="Documents" context="System">
  <displayName>Component to migrate all user documents except Sample.doc</displayName>
  <role role="Data">
	<rules>
		 <include>
			<objectSet>
				 <pattern type="File"> C:\UserDocuments\* [*]</pattern>
			</objectSet>
		</include>
		<exclude>
			 <objectSet>
				 <pattern type="File"> C:\UserDocuments\ [Sample.doc]</pattern>
			 </objectSet>
		</exclude>
	</rules>
  </role>
</component>

<component type="Documents" context="System">
  <displayName>Component to migrate all Requests folders on any drive on the computer </displayName>
  <role role="Data">
	<rules>
		 <include>
			<objectSet>
		 <script>MigXmlHelper.GenerateDrivePatterns ("\Requests\* [*] ", "Fixed")</script> 	
		 <script>MigXmlHelper.GenerateDrivePatterns ("*\Requests\* [*] ", "Fixed")</script> 	
	 </objectSet>
		</include>
	</rules>
  </role>
</component>

<component type="Documents" context="System">
  <displayName>Component to migrate all Presentations folder from any location on the C: drive </displayName>
  <role role="Data">
	<rules>
		 <include>
			<objectSet> 			 
<pattern type="File"> C:\*\Presentations\* [*]</pattern>
<pattern type="File"> C:\Presentations\* [*]</pattern>
		 </objectSet>
		</include>
	</rules>
  </role>
</component>
</migration>

See Also