<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Heath Stewart's Blog</title><subtitle type="html">About Windows Installer, the .NET Framework, and Visual Studio.</subtitle><id>http://blogs.msdn.com/heaths/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/heaths/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-02-02T13:02:11Z</updated><entry><title>WoW64 is optional in Windows Server 2008 R2 Server Core</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/11/06/wow64-is-optional-in-windows-server-2008-r2-server-core.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/11/06/wow64-is-optional-in-windows-server-2008-r2-server-core.aspx</id><published>2009-11-06T10:53:22Z</published><updated>2009-11-06T10:53:22Z</updated><content type="html">&lt;p&gt;Installation bootstrap applications are increasingly common as products chain dependencies like the Microsoft .NET Framework. Because &lt;a href="http://blogs.msdn.com/heaths/archive/2005/02/17/375816.aspx"&gt;64-bit Windows supports both 32- and 64-bit execution&lt;/a&gt;, but 64-bit executables on 32-bit Windows give what some users might consider cryptic error messages, installation developers often ship a 32-bit bootstrap application that runs in either environment. Then in scenarios when a required package installs only in 64-bit Windows, the bootstrap application can present a friendly actionable error message.&lt;/p&gt;  &lt;p&gt;Microsoft Windows supports 32-bit execution on 64-bit Windows with Windows-on-Windows 64-bit (WoW64). But what if WoW64 wasn’t available?&lt;/p&gt;  &lt;p&gt;To support deployment to more constrained systems and to install with a smaller footprint to secure and maintain, Windows Server 2008 R2 &lt;a href="http://technet.microsoft.com/en-us/library/cc753802.aspx"&gt;Server Core&lt;/a&gt; offers WoW64 as an &lt;a href="http://technet.microsoft.com/en-us/library/dd883268(WS.10).aspx"&gt;optional feature&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;What does this mean for installation developers? Overall, 32-bit executables will not execute since the WoW64 subsystem is not installed. More specifically,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;32-bit custom actions will not execute. Windows Installer will fail create a custom action server with error code 308.&lt;/li&gt;    &lt;li&gt;32-bit bootstrap applications will not execute. You can expect error code 308 and the error message, “The subsystem needed to support the image type is not present.”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;However,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Packages &lt;a href="http://msdn.microsoft.com/en-us/library/aa372070.aspx"&gt;attributed&lt;/a&gt; to support the Intel platform will install as long as they do not contain 32-bit custom actions.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But this is really no cause for alarm. This only applies to Windows Server 2008 R2 Server Core designed to provide one or a few roles or features in an enterprise. They aren’t designed to run client applications. Administrators aren’t likely to install many applications on Server Core. And in Windows Server 2008 R2 Server Core &lt;a href="http://blogs.technet.com/server_core/archive/2009/05/05/wow64-support-on-server-core-in-windows-server-2008-r2.aspx"&gt;WoW64 is enabled by default&lt;/a&gt; based on customer feedback from beta 2.&lt;/p&gt;  &lt;p&gt;If you need to support server core and have 32-bit components to install, consider &lt;a href="http://blogs.msdn.com/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx"&gt;separate packages for 32- and 64-bit&lt;/a&gt; instead of a 64-bit package that contains 32-bit components and custom actions. This will allow for flexibility in supporting 32-bit only, 32- and 64-bit mixed, and 64-bit only installation. More work may be required to support processor-independent data files and other resources.&lt;/p&gt;  &lt;p&gt;But remember this is only if you need to support Server Core. Most installation developers should have no cause for worry regarding the absence of WoW64.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918507" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="64-bit" scheme="http://blogs.msdn.com/heaths/archive/tags/64-bit/default.aspx" /><category term="Custom Actions" scheme="http://blogs.msdn.com/heaths/archive/tags/Custom+Actions/default.aspx" /></entry><entry><title>Visual Studio 2010 and .NET Framework 4 Beta 2 Released</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/10/19/visual-studio-2010-and-net-framework-4-beta-2-released.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/10/19/visual-studio-2010-and-net-framework-4-beta-2-released.aspx</id><published>2009-10-19T23:01:48Z</published><updated>2009-10-19T23:01:48Z</updated><content type="html">&lt;p&gt;As &lt;a href="http://blogs.msdn.com/somasegar/archive/2009/10/19/announcing-visual-studio-2010-and-net-fx-4-beta-2.aspx"&gt;announced&lt;/a&gt; on &lt;a href="http://blogs.msdn.com/somasegar"&gt;Soma’s blog&lt;/a&gt; this morning, Microsoft Visual Studio 2010 Beta 2 and the .NET Framework 4 Beta 2 have been &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;released to MSDN Subscribers&lt;/a&gt; and will be available for everyone on Wednesday.&lt;/p&gt;  &lt;p&gt;Visual Studio 2010 boasts a great new user interface with better contrast and lots of UI elements that tend to add confusion to the development process. It’s pretty amazing how getting rid of a few lines increases usability.&lt;/p&gt;  &lt;p&gt;For developers redistributing the .NET Framework, perhaps the best news is how much &lt;a href="http://blogs.msdn.com/pmarcu/archive/2009/09/30/net-framework-4-0-beta-2-deployment.aspx"&gt;smaller and faster&lt;/a&gt; runtime deployment is. &lt;a href="http://blogs.msdn.com/pmarcu"&gt;Peter Marcu&lt;/a&gt; also describes robustness features added to .NET Framework 4 setup such as attempting to fix common problems and retrying installation automatically.&lt;/p&gt;  &lt;p&gt;Check them out and &lt;a href="https://connect.microsoft.com/VisualStudio/content/content.aspx?ContentID=12362"&gt;give us your feedback&lt;/a&gt; on issues you find. We also have &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/VSPreRelease,netdevelopmentprerelease,visualstudioprerelease,vstsprerelease"&gt;dedicated forums&lt;/a&gt; for more social interactions with both Microsoft employees and other community members.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909511" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="News" scheme="http://blogs.msdn.com/heaths/archive/tags/News/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://blogs.msdn.com/heaths/archive/tags/.NET/default.aspx" /><category term="VS 2010" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2010/default.aspx" /></entry><entry><title>Booting Windows to a Differencing Virtual Hard Disk</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/10/13/booting-windows-to-a-differencing-virtual-hard-disk.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/10/13/booting-windows-to-a-differencing-virtual-hard-disk.aspx</id><published>2009-10-14T01:51:20Z</published><updated>2009-10-14T01:51:20Z</updated><content type="html">&lt;p&gt;Testing software can be fun and rewarding. You get to see new, upcoming features and provide valuable feedback to the developer. But as with most pre-release software, we recommend that you don’t install it on production machines. You could dedicate extra machines for testing, or even test in a virtual machine. Virtual machines are great for testing operating systems and applications, and maximizing system resource usage. You can even take snapshots of the system disk and memory states and roll back to previous states.&lt;/p&gt;  &lt;p&gt;Besides requiring additional memory and processor time, another problem with virtual machines is that they run under a standard configuration of a basic display driver and no sound driver in Hyper-V. All your other devices attached to your machine are not always accessible, including your graphics card that provides a nice Aero glass experience in Windows Vista and Windows 7.&lt;/p&gt;  &lt;p&gt;But by installing Windows to a &lt;a href="http://technet.microsoft.com/bb738373.aspx"&gt;virtual hard disk&lt;/a&gt; (VHD) – the same format used by virtual machines – and creating a differencing disk on top of that you can test multiple configurations on the same base platform. You can choose with physical or virtual hard disk to boot and also take advantage of all the system devices your machine has to offer.&lt;/p&gt;  &lt;h3&gt;Step 1 (Optional): Partition your hard disk to store your VHD files&lt;/h3&gt;  &lt;p&gt;If you already have installed Windows Vista or Windows 7 and have plenty of free space on your system partition or in another partition – almost twice the amount of the virtual partitions you want to create – you may proceed to step 2. This step is useful if you want to install only to VHD files on your machine.&lt;/p&gt;  &lt;p&gt;You’ll need to create a partition to store the &lt;a href="http://technet.microsoft.com/library/cc770770.aspx"&gt;boot configuration data&lt;/a&gt; (BCD) as well as the virtual hard disk (VHD) files. These can exist in the same partition, but Windows will typically create separate partitions as you see in the screenshot below. This also allow you to encrypt the system partition with &lt;a href="http://technet.microsoft.com/windows/aa905065.aspx"&gt;BitLocker drive encryption&lt;/a&gt; (BDE) while maintaining a boot-readable partition.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Insert your Windows Vista or Windows 7 installation disk. &lt;/li&gt;    &lt;li&gt;Proceed through the installation wizard until you see the installation type selection dialog which reads, “Which type of installation do you want?” Click &lt;b&gt;Custom (advanced)&lt;/b&gt;. &lt;/li&gt;    &lt;li&gt;Select the unallocated space and click the &lt;b&gt;New&lt;/b&gt; button. Windows installation will warn you that it will create another partition. This will appear as “System Reserved”. &lt;/li&gt;    &lt;li&gt;Select the other partition and click the &lt;b&gt;Format&lt;/b&gt; button. &lt;/li&gt;    &lt;li&gt;Press Shift+F10 to bring up a command prompt. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot05.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image002_d57d9876-528b-4903-a4ce-2f3fccd6caac.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot06.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image004_0b15b71f-11ed-4c7d-8236-0a234319c58e.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 2: Create the VHD file&lt;/h3&gt;  &lt;p&gt;You’ll create a base virtual hard disk (VHD) in a partition with enough space available to hold the base installation and the differencing disk. This should be roughly twice the amount of space you pass to the “maximum” argument in the steps below. The number you pass to the “maximum” argument is in MB. A typical Windows 7 (x86) installation with a half-dozen or so driver updates and &lt;a href="http://www.microsoft.com/forefront"&gt;Microsoft ForeFront&lt;/a&gt; took a little over 6GB before being compressed.&lt;/p&gt;  &lt;p&gt;You’ll create an expandable VHD as the base since it won’t be modified when booting to a differencing VHD. The installation will take a little longer since the VHD will be expanded as necessary, but this will result in a small base VHD instead of wasting unused space for a fixed VHD.&lt;/p&gt;  &lt;p&gt;For the following steps, if you’re already logged into Windows Vista or Windows 7 you’ll need to open an elevated command prompt. If you’ve completed step 1, you continue in the command prompt you already opened.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In the command prompt, type the following commands. Substitute the path to the VHD with a path of your choosing. You may also specify a different size (in MB), but make sure the partition you create them in contains about twice the space you specify. &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;diskpart      &lt;br /&gt;create vdisk file=C:\Win7-base.vhd maximum=65536 type=expandable       &lt;br /&gt;select vdisk file=C:\Win7-base.vhd       &lt;br /&gt;attach vdisk       &lt;br /&gt;exit&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ol start="2"&gt;   &lt;li&gt;Switch back to the installation wizard and click the &lt;b&gt;Refresh&lt;/b&gt; button. &lt;/li&gt;    &lt;li&gt;Select the new unallocated partition and click &lt;b&gt;Next&lt;/b&gt;. You may see a warning that reads, “Windows cannot be installed to this disk. (Show details)” but can often safely ignore this. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot11.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image006_baadb585-6f22-43bb-8de7-8509804767b6.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot13.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image008_093560bc-79a5-4552-a45d-239b9d40401b.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 3 (Optional): Update drivers and install minimal software&lt;/h3&gt;  &lt;p&gt;After the installation has finished and you have logged in, you may want to update or install additional drivers for your hardware. You might also consider installing a minimal amount of software like a virus scanner. This will yield a smaller differencing disk.&lt;/p&gt;  &lt;p&gt;For example, with virus software there are program files that need to be installed. Incremental updates may be provided for virus definitions. By installing the virus software first before creating the differencing disk, only definition updates will be contained within the differencing disk.&lt;/p&gt;  &lt;p&gt;If you have installed the same Windows version that was already installed on another partition (if any) you may also have duplicate boot entry descriptions. You can rename the VHD boot entry to be unique.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Type the following in an elevated command prompt.&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;bcdedit /v&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ol start="2"&gt;   &lt;li&gt;Find the boot entry where the value of the “device” data type reads “vhd=C:\Win7-base.vhd”. Copy the GUID value of the “identifier” data type. If quick edit isn’t enabled for the command prompt, right click and select &lt;b&gt;Mark&lt;/b&gt;. Highlight the GUID – including the curly braces – and press &lt;b&gt;Enter&lt;/b&gt;. An example GUID looks like {f7bc2aa7-8ca2-11dc-936e-edd86d023230}.&lt;/li&gt;    &lt;li&gt;Type the following commands into the command prompt. Replace &lt;i&gt;{guid}&lt;/i&gt; below with the GUID you copied above.&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;bcdedit /set &lt;i&gt;{guid}&lt;/i&gt; description “Windows 7 (VHD)”&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Finally, you may wish to run Windows Update one last time before attempting to reduce the VHD file size. Be sure to reboot so that any changes made to disk after the reboot are contained within the base VHD.&lt;/p&gt;  &lt;h3&gt;Step 4 (Optional): Reduce the base VHD file size&lt;/h3&gt;  &lt;p&gt;If you wish to reduce the amount of physical disk space consumed by the base VHD, you can attempt to reduce space within the VHD and then compress it from another Windows installation. It’s interesting to note that if you are viewing the VHD file on a separate partition while booted into the VHD file, the file size will appear to be the maximum size of the VHD. If you created an expandable disk as described in these instructions that is not accurate. You will see the correct file size when booted into a different partition.&lt;/p&gt;  &lt;p&gt;You might also wish to &lt;a href="http://support.microsoft.com/kb/307886/"&gt;relocate the paging file&lt;/a&gt; to the physical hard disk to reduce space consumed in the base VHD and reduce changes in the differencing VHD.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;While booted to the VHD, click the &lt;b&gt;Start&lt;/b&gt; button.&lt;/li&gt;    &lt;li&gt;Type “Disk Cleanup” (without quotes), right click on program shortcut, and click &lt;b&gt;Run as administrator&lt;/b&gt;.&lt;/li&gt;    &lt;li&gt;Select the VHD drive letter and click the &lt;b&gt;OK&lt;/b&gt; button.&lt;/li&gt;    &lt;li&gt;Check all the options under “Files to delete” and click the &lt;b&gt;OK&lt;/b&gt; button.&lt;/li&gt;    &lt;li&gt;Click the &lt;b&gt;Start&lt;/b&gt; button again.&lt;/li&gt;    &lt;li&gt;Type “Disk Defragmenter” (without quotes) and select the program shortcut.&lt;/li&gt;    &lt;li&gt;(Optional) You might want to click the &lt;b&gt;Configure schedule&lt;/b&gt; button and disable automatic defragmentation. While booted into a differencing VHD, defragmenting the disk can lead to a big increase in the differencing disk size.&lt;/li&gt;    &lt;li&gt;Click the &lt;b&gt;Defragment disk&lt;/b&gt; button and wait for defragmentation to complete.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If you have formatted the VHD as NTFS (default for Windows Vista and Windows 7) you do not need to run the Virtual Disk Precompactor that ships with Virtual Server and Virtual PC. This may help for FAT-formatted partitions, though.&lt;/p&gt;  &lt;p&gt;After you have defragmented, reboot into a different partition. You may boot into Windows and open an elevated command prompt, or start Windows installation and open a command prompt as described in step 1. Type the following commands.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;diskpart      &lt;br /&gt;select vdisk file=C:\Win7-base.vhd       &lt;br /&gt;compact vdisk&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This may take some time to complete, but you should notice a decrease in file size of C:\Win7-base.vhd.&lt;/p&gt;  &lt;h4&gt;Step 5: Create the differencing VHD and configure the boot entry&lt;/h4&gt;  &lt;p&gt;Next you’ll create a differencing VHD that will store all the differences between what you write to the disk and the base VHD. When you install software, it’s all contained within the differencing VHD and the base VHD is not modified. You can even create multiple differencing VHDs and boot to each of them separately, or create a chain of differencing VHDs.&lt;/p&gt;  &lt;p&gt;In the following example you’ll create a differencing VHD for installing Visual Studio 2010 Beta 2, but you could use any file name and path or install any software you like instead.&lt;/p&gt;  &lt;p&gt;You cannot be booted into the base VHD when creating the differencing VHD. If you have rebooted into another partition with Windows Vista or Windows 7, or into a Windows installation, do so now. Open an elevated command prompt as described in previous steps.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Type the following into the command prompt. Substitute the path to the differencing VHD with a path of your choosing.&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;diskpart      &lt;br /&gt;create vdisk file=C:\Dev10-Beta2.vhd parent=C:\Win7-base.vhd       &lt;br /&gt;exit&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ol start="2"&gt;   &lt;li&gt;Enumerate the existing boot entries. Find the boot entry where the value of the “device” data type reads “vhd=C:\Win7-base.vhd”. This is the same GUID as the one you may have copied in optional step 3.&lt;/li&gt;    &lt;li&gt;Type the following into the command prompt. Replace &lt;i&gt;{guid}&lt;/i&gt; below with the GUID you copied.&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;bcdedit /v      &lt;br /&gt;bcdedit /copy &lt;i&gt;{guid}&lt;/i&gt; /d “Dev10”&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ol start="4"&gt;   &lt;li&gt;You’ll see a message printed like, “The entry was successfully copied to {f7bc2aaa-8ca2-11dc-936e-edd86d023230}.” Copy this new GUID and replace &lt;i&gt;{guid}&lt;/i&gt; below with this new GUID when typing the following commands. The last command will set this boot entry as the default. You should not boot to the base VHD again or you will invalid the differencing VHD.&lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;bcdedit /set &lt;i&gt;{guid&lt;/i&gt;} device vhd=[locate]\Dev10-Beta2.vhd       &lt;br /&gt;bcdedit /set &lt;i&gt;{guid}&lt;/i&gt; osdevice vhd=[locate]\Dev10-Beta2.vhd       &lt;br /&gt;bcdedit /default &lt;i&gt;{guid}&lt;/i&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot21.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image010_80393514-1743-407f-8009-69271ebddd82.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot23.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image012_e9aa2e13-a03f-41d5-9b74-79bec536c578.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 6: Install Visual Studio 2010&lt;/h3&gt;  &lt;p&gt;After you have rebooted the machine into the new differencing VHD you can begin installing software. In this example you’ll install Visual Studio 2010. Download and run the web installer or insert your installation media and run setup.exe.&lt;/p&gt;  &lt;p&gt;Follow the installation wizard choosing either the default installation or a custom installation. After the install is completed explore the new features of Visual Studio 2010 and enjoy.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot25.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image014_48ca50f8-e3f9-4068-85c5-79c9d55118c6.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://cid-9415f61cbb1a8030.skydrive.live.com/self.aspx/Boot%20to%20VHD/Screenshot32.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://blogs.msdn.com/blogfiles/heaths/WindowsLiveWriter/BootingWindowstoaDifferencingVirtualHard_105CA/clip_image016_b7df365d-b984-44d6-87d1-a397b5c3857a.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;Virtual hard disks are an integral part of virtual machines, but if you want to test on real hardware booting to a VHD is a good alternative. &lt;a href="http://technet.microsoft.com"&gt;Microsoft TechNet&lt;/a&gt; has a lot of details about preparing, deploying, and booting to &lt;a href="http://social.technet.microsoft.com/search/en-US?query=vhd"&gt;VHDs&lt;/a&gt;; and the &lt;a href="http://blogs.technet.com/virtualization"&gt;Microsoft Virtualization team blog&lt;/a&gt; has &lt;a href="http://blogs.technet.com/virtualization/archive/2009/05/14/native-vhd-support-in-windows-7.aspx"&gt;more great information&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906945" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Vista" scheme="http://blogs.msdn.com/heaths/archive/tags/Vista/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term="Windows 7" scheme="http://blogs.msdn.com/heaths/archive/tags/Windows+7/default.aspx" /></entry><entry><title>ATL Security Update KB971092 still offered on Microsoft Update</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/08/09/atl-security-update-kb971092-still-offered-on-microsoft-update.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/08/09/atl-security-update-kb971092-still-offered-on-microsoft-update.aspx</id><published>2009-08-10T05:10:45Z</published><updated>2009-08-10T05:10:45Z</updated><content type="html">&lt;p&gt;A security update for ATL, &lt;a href="http://support.microsoft.com/kb/971092"&gt;KB971092&lt;/a&gt;, is currently offered for Visual Studio 2008 Service Pack 1 customers who have Visual C++ installed. If Microsoft Update is continuously offering this patch to you, you may need to clear up some disk space. The patch is 365MB and contains headers, libraries, and executables for most of Visual C++ including ATL and the CRT. This patch, however, may require up to 3.7GB to install with a possible residual footprint of about 1.7GB if you have all Visual C++ features installed.&lt;/p&gt;  &lt;h3&gt;How to workaround this issue&lt;/h3&gt;  &lt;p&gt;If you are continuously being offered ATL security update KB971092, most likely you need to free up some additional space. You’ll need about 3.7GB to install this patch. If you’ve already &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=294de390-3c94-49fb-a014-9a38580e64cb"&gt;downloaded it&lt;/a&gt; from the Download Center, you’ll need about 3.4GB.&lt;/p&gt;  &lt;p&gt;Alternatively, if you do not use Visual C++ you can also re-run setup and choose to uninstall the Visual C++ feature and all its children. The patch should no longer be offered to you after that.&lt;/p&gt;  &lt;h4&gt;Freeing additional space&lt;/h4&gt;  &lt;p&gt;To free additional space, first run the Disk Cleanup utility as an administrator. If you are prompted to clean up for the current users or everyone, choose everyone. On Windows 7, after the main user interface is displayed click on the &lt;strong&gt;Clean up system files&lt;/strong&gt; button. Because this is a security update, it is recommended you check all options and click &lt;strong&gt;OK&lt;/strong&gt; to delete those files.&lt;/p&gt;  &lt;p&gt;You may also delete the Windows Installer baseline cache. These files are useful to help eliminate prompts for source when uninstalling patches, and even sometimes when installing certain types of patches. By deleting these files, if you are prompted for source you may need to insert your original installation media, or download and extract previously downloaded installations.&lt;/p&gt;  &lt;p&gt;To delete these files, open an elevated command prompt and type the following command.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;rmdir /q /s %WINDIR%\Installer\$PatchCache$&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DO NOT&lt;/strong&gt; delete %WINDIR%\Installer no matter how large it might be. The &lt;a href="http://blogs.msdn.com/heaths/archive/2007/01/17/the-patch-cache-and-freeing-space.aspx"&gt;cached files&lt;/a&gt; in this directory are needed to repair, patch, and even uninstall Windows Installer products. &lt;a href="http://blogs.msdn.com/heaths/archive/2006/11/30/rebuilding-the-installer-cache.aspx"&gt;Rebuilding the cache&lt;/a&gt; is very difficult and time consuming, and you may have to reinstall Windows. If you want to reduce space consumed in this directory, you may uninstall any products you do not use.&lt;/p&gt;  &lt;h3&gt;Description of the issue&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/heaths/archive/2008/07/24/why-windows-installer-may-require-so-much-disk-space.aspx"&gt;Windows Installer may require a lot of space&lt;/a&gt;. It is a transactional installation engine, so it must make copies of the older files that will be replaced. To maintain security during installation, a copy of the patch itself is made after verifying security and possibly prompting for consent (UAC). To support uninstalling the patch without prompting for source, copies of the older files being replaced are also stored in the baseline cache mentioned above, %WINDIR%\Installer\$PatchCache$.&lt;/p&gt;  &lt;p&gt;If you do not want the patch cache to be created for this or any other products when patched, you can set the &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/maxpatchcachesize.asp"&gt;MaxPatchCacheSize&lt;/a&gt; system policy to 0. You must stop the Windows Installer service for the change to take affect. Future Windows Installer installations will automatically start the service so merely stopping it is sufficient. &lt;a href="http://blogs.msdn.com/heaths/archive/2006/12/08/the-windows-installer-service.aspx"&gt;It will automatically stop after 10 minutes of inactivity as well&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;After the patch is installed, a copy of the patch is kept for future installation operations – to support patch uninstall, for example – and cannot be deleted until all applicable products are uninstalled.&lt;/p&gt;  &lt;p&gt;If you did not already disable the baseline cache, copies of files replaced under %ProgramFiles% (default) are left behind to reduce source prompts. You can delete these as described above, with the understanding you may be prompted for the source of Visual Studio 2008 in the future, especially if you uninstall this ATL security update.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9862806" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="VS 2008 SP1" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2008+SP1/default.aspx" /></entry><entry><title>Microsoft .NET Framework 4.0 Beta 1 should be removed before upgrading to Windows 7</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/08/09/microsoft-net-framework-4-0-beta-1-should-be-removed-before-upgrading-to-windows-7.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/08/09/microsoft-net-framework-4-0-beta-1-should-be-removed-before-upgrading-to-windows-7.aspx</id><published>2009-08-10T03:16:00Z</published><updated>2009-08-10T03:16:00Z</updated><content type="html">&lt;p&gt;If you have been beta testing &lt;a href="http://msdn.microsoft.com/en-us/netframework/dd819232.aspx"&gt;Microsoft .NET Framework 4.0 Beta 1&lt;/a&gt;, we recommend you install a fresh copy of Windows 7 on your machine. Alternatively, you may also choose to &lt;a href="http://blogs.msdn.com/aaronru/archive/2009/08/06/guidance-to-upgrade-from-windows-vista-and-to-windows-7-with-visual-studio-2010-beta-1-installed.aspx"&gt;uninstall Visual Studio 2010 Beta 1 and .NET 4.0 Beta 1&lt;/a&gt; prior to upgrading to Win7.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Microsoft Windows 7&lt;/a&gt; is &lt;a href="http://msdn.microsoft.com/subscriptions/securedownloads/default.aspx?pv=36:350"&gt;available to MSDN and TechNet subscribers&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Problem&lt;/h3&gt;  &lt;p&gt;If you have installed .NET Framework 4.0 Beta 1 on your Windows Vista machine, after upgrading to Windows 7 you may encounter some problems. Managed code may not function, especially applications built to target .NET 4.0 Beta 1. Also, if you have any ClickOnce applications installed, Windows Explorer may crash continuously when you log in.&lt;/p&gt;  &lt;h3&gt;Status&lt;/h3&gt;  &lt;p&gt;This issue has been fixed in .NET Framework 4.0 Beta 2.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9862766" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="News" scheme="http://blogs.msdn.com/heaths/archive/tags/News/default.aspx" /><category term=".NET" scheme="http://blogs.msdn.com/heaths/archive/tags/.NET/default.aspx" /><category term="Windows 7" scheme="http://blogs.msdn.com/heaths/archive/tags/Windows+7/default.aspx" /><category term="VS 2010" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2010/default.aspx" /></entry><entry><title>Trouble installing other products after Visual Studio</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/07/31/trouble-installing-other-products-after-visual-studio.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="774" href="http://blogs.msdn.com/heaths/attachment/9854283.ashx" /><id>http://blogs.msdn.com/heaths/archive/2009/07/31/trouble-installing-other-products-after-visual-studio.aspx</id><published>2009-07-31T12:48:00Z</published><updated>2009-07-31T12:48:00Z</updated><content type="html">&lt;P&gt;Customers have commented that whenever they try to install other products or patches they continually see the following message,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Another installation is in progress. You must complete that installation before continuing this one.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Customers may also see instances of msiexec.exe or msiexec.exe*32 appear continuously in Task Manager or other process monitoring software.&lt;/P&gt;
&lt;P&gt;This may occur after installing either Visual Studio 2008 or Visual Studio 2010 Beta 1. If you look in your Application event log as described below, for the MsiInstaller source you may see a message like either of the following,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Detection of product '{AA4A4B2C-0465-3CF8-BA76-27A027D8ACAB}', feature 'VSTA_IDE_12590_x86_enu', component '{FF4A39EF-8F8B-4557-9F81-50DC44C6D30A}' failed.&amp;nbsp; The resource 'c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\en\' does not exist.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Or,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Detection of product '{874D5E2B-AACE-303A-B3EC-2563E071473E}', feature 'VS_IDE_657_x86_enu', component '{A5854250-7B92-4A50-935F-6A486589F87D}' failed.&amp;nbsp; The resource 'd:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en\' does not exist.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In either case, some of the quoted values may be different but the path may still reference “Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en”.&lt;/P&gt;
&lt;H3&gt;How to workaround this issue&lt;/H3&gt;
&lt;P&gt;To determine if the issue affecting you is the one described here, you must start the event viewer. This is also necessary to identify the missing resource, if any, that needs to be created.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Start&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Run&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “eventvwr” (without quotes) and click &lt;STRONG&gt;OK&lt;/STRONG&gt;. If you are prompted to elevated on Vista or newer, click &lt;STRONG&gt;Continue&lt;/STRONG&gt;. &lt;/LI&gt;
&lt;LI&gt;Expand &lt;STRONG&gt;Windows Logs&lt;/STRONG&gt; and click &lt;STRONG&gt;Application&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Find the recent warning where the Source is MsiInstaller. In Vista and newer, 
&lt;OL&gt;
&lt;LI&gt;Click &lt;STRONG&gt;Filter Current Log…&lt;/STRONG&gt; in the right action pane &lt;/LI&gt;
&lt;LI&gt;Check &lt;STRONG&gt;Warning&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “MsiInstaller” (without quotes) in the &lt;STRONG&gt;Event sources&lt;/STRONG&gt; edit control &lt;/LI&gt;
&lt;LI&gt;Type “1004” (without quotes) in the event IDs edit control &lt;/LI&gt;
&lt;LI&gt;Click &lt;STRONG&gt;OK&lt;/STRONG&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I've also attached an event viewer filter you can unzip and import as a custom view.&lt;/P&gt;
&lt;P&gt;You should see a message similar to those above, stating stating that a directory like “C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\en\” does not exist. If you do not find such a message, you might search for event ID 1001 as logged during a &lt;A href="http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx" mce_href="http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx"&gt;similar event&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;To workaround this particular issue, simply create the directory that is missing.&lt;/P&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;Description of the issue&lt;/H3&gt;
&lt;P&gt;This is another example of the &lt;A href="http://robmensching.com/blog/posts/2007/3/12/RobMens-Recommendation-Do-not-advertise-COM-information-in-MSI" mce_href="http://robmensching.com/blog/posts/2007/3/12/RobMens-Recommendation-Do-not-advertise-COM-information-in-MSI"&gt;potential problems when advertising Windows Installer features&lt;/A&gt;. When COM registration is advertised, serialized data identifying the product feature that provides the COM server is written to the registry. When the class loader reads this value in this format that identifies a Windows Installer product feature, Windows Installer is queried for the component path which starts a &lt;A href="http://msdn.microsoft.com/library/aa371230.aspx" mce_href="http://msdn.microsoft.com/library/aa371230.aspx"&gt;resiliency check&lt;/A&gt; against the feature.&lt;/P&gt;
&lt;P&gt;Because in this case a directory is missing for a component, Windows Installer logs an event and begins a maintenance installation to repair affected features. If you cancel this repair operation the issue will continue to surface. If allowed to continue, you might be prompted for source. However, unlike another example of a &lt;A href="http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx" mce_href="http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx"&gt;similar event&lt;/A&gt;, repairing the product will not resolve the issue.&lt;/P&gt;
&lt;P&gt;As described for &lt;A href="http://msdn.microsoft.com/library/aa368942.aspx" mce_href="http://msdn.microsoft.com/library/aa368942.aspx"&gt;ICE18&lt;/A&gt;, a component that does not have a key path set must declare a related entry in the &lt;A href="http://msdn.microsoft.com/library/aa368053.aspx" mce_href="http://msdn.microsoft.com/library/aa368053.aspx"&gt;CreateFolder&lt;/A&gt; table. Of course, a versioned file is always preferred as a key path for a component if available, but an unversioned file or registry value will suffice.&lt;/P&gt;
&lt;P&gt;So because the component referenced in the event log does not declare a key path nor create the “en” sub-directory, a repair triggered by a resiliency check will always be performed. And because only one Windows Installer transaction can run at a time, other Windows Installer installations are blocked.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9854283" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="VS 2008 SP1" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2008+SP1/default.aspx" /><category term="VS 2010" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2010/default.aspx" /></entry><entry><title>Installation sequence restrictions for multi-package transactions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/07/03/installation-sequence-restrictions-for-multi-package-transactions.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/07/03/installation-sequence-restrictions-for-multi-package-transactions.aspx</id><published>2009-07-03T10:02:11Z</published><updated>2009-07-03T10:02:11Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5A58B56F-60B6-4412-95B9-54D056D6F9F4"&gt;Windows Installer 4.5&lt;/a&gt; &lt;a href="http://blogs.msdn.com/heaths/archive/2007/08/27/what-s-new-in-windows-installer-4-5-overview.aspx"&gt;introduced a feature&lt;/a&gt; to install multiple packages in a single transaction. Multi-package transactions allow setup developers to install multiple packages as an atomic unit that are installed together, or rolled back completely. You can also apply patches to multiple products or even repair multiple products – any maintenance mode installation – within a single transaction. Installation scripts are not merged but executed in the order that packages are installed, and commit actions are deferred till the very end.&lt;/p&gt;  &lt;p&gt;There is an installation sequence restriction, however: if you are installing both 32- and 64-bit packages – marked in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa372070.aspx"&gt;Template summary property&lt;/a&gt; of an MSI package – you must install the 64-bit packages first before the 32-bit packages.&lt;/p&gt;  &lt;p&gt;Within a single transaction, if you install a 32-bit package and then a 64-bit package, any attempts to install files to 64-bit directories like &lt;a href="http://msdn.microsoft.com/en-us/library/aa370880.aspx"&gt;ProgramFiles64Folder&lt;/a&gt; will be redirected as highlighted below.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160; ******* Product: x86.msi      &lt;br /&gt;      &lt;br /&gt;MSI (s) (3C:4C) [22:35:38:008]: Running installation inside multi-package transaction MultiMsi&amp;#160; &lt;br /&gt;       &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:821]: Target path resolution complete. Dumping Directory table...       &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:822]: Note: target paths subject to change (via custom actions or browsing)       &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:831]: Dir (target): Key: TARGETDIR&amp;#160;&amp;#160;&amp;#160; , Object: C:\       &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:831]: Dir (target): Key: ProgramFilesFolder&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\      &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:841]: Dir (target): Key: ManufacturerDir&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\Heath Stewart\       &lt;br /&gt;MSI (s) (3C:F4) [22:35:45:849]: Dir (target): Key: INSTALLLOCATION&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\Heath Stewart\MultiMsi (x86)\&amp;#160; &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ******* Product: x64.msi       &lt;br /&gt;      &lt;br /&gt;MSI (s) (3C:4C) [22:35:48:404]: Running installation inside multi-package transaction MultiMsi&amp;#160; &lt;br /&gt;       &lt;br /&gt;&lt;span style="background: yellow" class="highlight"&gt;MSI (s) (3C:38) [22:35:48:793]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0).        &lt;br /&gt;MSI (s) (3C:38) [22:35:48:793]: PROPERTY CHANGE: Modifying ProgramFiles64Folder property. Its current value is 'C:\Program Files\'. Its new value: 'C:\Program Files (x86)\'. &lt;/span&gt;      &lt;br /&gt;       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:797]: Target path resolution complete. Dumping Directory table...       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:798]: Note: target paths subject to change (via custom actions or browsing)       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:799]: Dir (target): Key: TARGETDIR&amp;#160;&amp;#160;&amp;#160; , Object: C:\       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:799]: Dir (target): Key: ProgramFiles64Folder&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:800]: Dir (target): Key: ManufacturerDir&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\Heath Stewart\       &lt;br /&gt;MSI (s) (3C:38) [22:35:48:801]: Dir (target): Key: INSTALLLOCATION&amp;#160;&amp;#160;&amp;#160; , Object: C:\Program Files (x86)\Heath Stewart\MultiMsi (x64)\&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;You can see the Windows Installer is redirecting ProgramFiles64Folder to &lt;a href="http://msdn.microsoft.com/en-us/library/aa370881.aspx"&gt;ProgramFilesFolder&lt;/a&gt;. Files intended for 64-bit locations end up in 32-bit locations. However, if you reverse the sequence of packages to install the 64-bit package first before the 32-bit package, the directories are resolved correctly as shown below.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160; ******* Product: x64.msi      &lt;br /&gt;      &lt;br /&gt;MSI (s) (F4:CC) [22:39:19:277]: Running installation inside multi-package transaction MultiMsi       &lt;br /&gt;      &lt;br /&gt;MSI (s) (F4:70) [22:39:21:325]: Target path resolution complete. Dumping Directory table...       &lt;br /&gt;MSI (s) (F4:70) [22:39:21:353]: Note: target paths subject to change (via custom actions or browsing)       &lt;br /&gt;MSI (s) (F4:70) [22:39:21:361]: Dir (target): Key: TARGETDIR , Object: C:\       &lt;br /&gt;MSI (s) (F4:70) [22:39:21:375]: Dir (target): Key: ProgramFiles64Folder , Object: C:\Program Files\       &lt;br /&gt;MSI (s) (F4:70) [22:39:21:407]: Dir (target): Key: ManufacturerDir , Object: C:\Program Files\Heath Stewart\       &lt;br /&gt;MSI (s) (F4:70) [22:39:21:430]: Dir (target): Key: INSTALLLOCATION , Object: C:\Program Files\Heath Stewart\MultiMsi (x64)\&amp;#160; &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ******* Product: x86.msi       &lt;br /&gt;      &lt;br /&gt;MSI (s) (F4:CC) [22:39:25:502]: Running installation inside multi-package transaction MultiMsi       &lt;br /&gt;      &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:896]: Target path resolution complete. Dumping Directory table...       &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:896]: Note: target paths subject to change (via custom actions or browsing)       &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:897]: Dir (target): Key: TARGETDIR , Object: C:\       &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:898]: Dir (target): Key: ProgramFilesFolder , Object: C:\Program Files (x86)\       &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:898]: Dir (target): Key: ManufacturerDir , Object: C:\Program Files (x86)\Heath Stewart\       &lt;br /&gt;MSI (s) (F4:FC) [22:39:25:899]: Dir (target): Key: INSTALLLOCATION , Object: C:\Program Files (x86)\Heath Stewart\MultiMsi (x86)\&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;To install components into their right directories, you must install 64-bit packages first before 32-bit packages. If you have a functional requirement to install the 32-bit packages first you must do so in a separate transaction and simulate rollback yourself: you must uninstall packages from previous transactions.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9816228" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="64-bit" scheme="http://blogs.msdn.com/heaths/archive/tags/64-bit/default.aspx" /><category term="Logging" scheme="http://blogs.msdn.com/heaths/archive/tags/Logging/default.aspx" /><category term="MSI4.5" scheme="http://blogs.msdn.com/heaths/archive/tags/MSI4.5/default.aspx" /></entry><entry><title>How to workaround the issue when opening Office applications repairs Visual Studio</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="771" href="http://blogs.msdn.com/heaths/attachment/9661938.ashx" /><id>http://blogs.msdn.com/heaths/archive/2009/05/29/how-to-workaround-the-issue-when-opening-office-applications-repairs-visual-studio.aspx</id><published>2009-05-30T03:52:00Z</published><updated>2009-05-30T03:52:00Z</updated><content type="html">&lt;P&gt;&lt;A href="http://www.microsoft.com/visualstudio/products/2010/default.mspx" mce_href="http://www.microsoft.com/visualstudio/products/2010/default.mspx"&gt;Microsoft Visual Studio 2010 Beta 1&lt;/A&gt; customers have been reporting that when they start Outlook or any of the Office applications, VS2010 is repaired. This issue can also happen for &lt;A href="http://blogs.msdn.com/astebner/archive/2007/08/17/4430917.aspx" mce_href="http://blogs.msdn.com/astebner/archive/2007/08/17/4430917.aspx"&gt;VS2005&lt;/A&gt; and VS2008, and for any products using Visual Basic for Applications (VBA).&lt;/P&gt;
&lt;P&gt;Besides being an annoyance and potentially taking a while to complete, the repair attempt can prompt for source. Picking the right source may not always be obvious from the dialog caption especially if it is truncated. And all the while Outlook or whichever application you started is probably waiting to finish starting up.&lt;/P&gt;
&lt;P&gt;Even if you successfully complete the repair operation, this issue may continue each time you start the same application.&lt;/P&gt;
&lt;H3&gt;How to workaround this issue&lt;/H3&gt;
&lt;P&gt;Windows Installer logs an event that describes the requested feature and which product it is repairing. For this simple workaround, you need to find the latest event log entry. Using information in that event log entry, you’ll remove and re-add a feature and all its components into directory that should always be available.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Start&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Run&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “eventvwr” (without quotes) and click &lt;STRONG&gt;OK&lt;/STRONG&gt;. If you are prompted to elevated on Vista or newer, click &lt;STRONG&gt;Continue&lt;/STRONG&gt;. &lt;/LI&gt;
&lt;LI&gt;Expand &lt;STRONG&gt;Windows Logs&lt;/STRONG&gt; and click &lt;STRONG&gt;Application&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Find the recent warning where the Source is MsiInstaller. In Vista and newer, 
&lt;OL style="LIST-STYLE-TYPE: lower-alpha"&gt;
&lt;LI&gt;Click &lt;STRONG&gt;Filter Current Log…&lt;/STRONG&gt; in the right action pane &lt;/LI&gt;
&lt;LI&gt;Check &lt;STRONG&gt;Warning&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “MsiInstaller” (without quotes) in the &lt;STRONG&gt;Event sources&lt;/STRONG&gt; edit control &lt;/LI&gt;
&lt;LI&gt;Type “1001” (without quotes) in the event IDs edit control &lt;/LI&gt;
&lt;LI&gt;Click &lt;STRONG&gt;OK&lt;/STRONG&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;You should see a message similar to the follow,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Detection of product '{316EE0C1-DB94-30BA-95E6-F4959035EE4B}', feature 'VB_for_VS_7_Ent_28_x86_enu' failed during request for component '{DD68FEE8-C369-11D1-A173-00A0C90AB50F}'&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I've also attached an event viewer filter you can unzip and import as a custom view.&lt;/P&gt;
&lt;P&gt;Keep the log viewer open with the recent warning of type 1001 and open an elevated command prompt.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;On XP as an administrator, 
&lt;OL&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Start&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Run&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “cmd” (without quotes) and click &lt;STRONG&gt;OK&lt;/STRONG&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;On Vista and newer. 
&lt;OL&gt;
&lt;LI&gt;Click on &lt;STRONG&gt;Start&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Type “Command Prompt” (without quotes) &lt;/LI&gt;
&lt;LI&gt;Right click on &lt;STRONG&gt;Command Prompt&lt;/STRONG&gt; and click &lt;STRONG&gt;Run as administrator&lt;/STRONG&gt;. If you are prompted to elevated, click &lt;STRONG&gt;Continue&lt;/STRONG&gt;. &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;You’ll now use the information in the warning message to run two commands consecutively. The first command removes the feature, and the second command reinstalls it locally. The reason you need to do this for this simple workaround is explained in detail below. Use the GUID after “product” along with the feature name as shown in the corresponding example below.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;start /wait msiexec.exe /i {316EE0C1-DB94-30BA-95E6-F4959035EE4B} /L*vx "%TEMP%\1.remove.log" REMOVE=VB_for_VS_7_Ent_28_x86_enu &lt;BR&gt;start /wait msiexec.exe /i {316EE0C1-DB94-30BA-95E6-F4959035EE4B} /L*vx "%TEMP%\2.addlocal.log" ADDLOCAL=VB_for_VS_7_Ent_28_x86_enu TARGETDIR="%ProgramFiles%\Microsoft Visual Studio 10.0"&lt;/CODE&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will likely be prompted for your installation media when running the second command, so be sure to have your installation DVD loaded or ISO mounted. If you installed from the web or your media is not available, you will be prompted to download the media from the web.&lt;/P&gt;
&lt;H3&gt;How to avoid this issue&lt;/H3&gt;
&lt;P&gt;If you have any external drives connected to your machine, consider disconnecting them when installing Visual Studio or make sure that they are plugged in when starting applications like Outlook if you have any add-ins for those applications installed.&lt;/P&gt;
&lt;H3&gt;Description of the issue&lt;/H3&gt;
&lt;P&gt;Some components in Visual Studio are authored to support advertised installations. By default, advertised components will not be installed until they are needed. For COM servers, Windows Installer writes encoded data to the server library registry value like InProcServer32. This information contains information about the product and feature that will install the component. Windows Installer will always trigger a health check when advertised data is present for COM objects since, inherently, the COM server path isn’t registered.&lt;/P&gt;
&lt;P&gt;Even though the feature that installs these components is typically installed locally, Windows Installer still writes this encoded data to the registry. This isn’t normally a problem unless the components to be advertised also install to &lt;A href="http://msdn.microsoft.com/en-us/library/aa372064.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa372064.aspx"&gt;TARGETDIR&lt;/A&gt; or a descendant of TARGETDIR that is not otherwise redirected.&lt;/P&gt;
&lt;P&gt;Because TARGETDIR must be the root directory of any Windows Installer package, technically every directory is a descendant of TARGETDIR; however, directories like &lt;A href="http://msdn.microsoft.com/en-us/library/aa370881.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa370881.aspx"&gt;ProgramFilesFolder&lt;/A&gt; are automatically redirected to their corresponding directories like C:\Program Files. Custom actions can also redirect directories, and this is typical in Visual Studio. If TARGETDIR itself isn’t redirected, it defaults to &lt;A href="http://msdn.microsoft.com/en-us/library/aa371372.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa371372.aspx"&gt;ROOTDRIVE&lt;/A&gt; which is the fixed drive with the most free space available, and “fixed drive” doesn’t necessarily mean its an internal drive. External drives these days are growing more common. Any descendants of TARGETDIR are also located relative to ROOTDRIVE then.&lt;/P&gt;
&lt;P&gt;So if you have an external drive with a lot of free space connected when you installed Visual Studio, a number of components may have gotten installed there. Even if you do not see any files mysteriously appear after installing Visual Studio, components may still have gotten registered to the other drive. This can actually happen for any Windows Installer products.&lt;/P&gt;
&lt;P&gt;Now if you start a product like Outlook that might have add-ins installed that use Visual Studio Tools for Office system Runtime (VSTOR) or Visual Basic for Applications (VBA), creating COM objects they install triggers a repair. This happens because Windows Installer requires the COM server path and this, in turn, triggers a health check. Since the component installation directory – TARGETDIR or a descendant when the component was installed – is no longer available, a repair begins but will ultimately fail in this case since the installation directory is unavailable.&lt;/P&gt;
&lt;P&gt;Other problems may manifest. For example, if a file within the same feature is missing for unrelated reasons, Windows Installer installer may prompt for source to replace that file.&lt;/P&gt;
&lt;P&gt;So if you had an external drive connected when you installed Visual Studio, make sure you keep it connected when starting applications like Outlook if you have add-ins installed – or at least if you’re experiencing this issue. Better yet for VS 2010 Beta 1, disconnect it when installing Beta 1 unless you intend to install Beta 1 to that drive but remember to keep it connected. On a related note, keep in mind that disk space on your Windows system drive is still &lt;A href="http://blogs.msdn.com/heaths/archive/2008/07/24/why-windows-installer-may-require-so-much-disk-space.aspx" mce_href="http://blogs.msdn.com/heaths/archive/2008/07/24/why-windows-installer-may-require-so-much-disk-space.aspx"&gt;consumed by Windows Installer&lt;/A&gt;, .NET Framework, and a few other components.&lt;/P&gt;
&lt;P&gt;We are working to identify all possible components that may cause this issue for future releases, including VS2010.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9661938" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term="VS 2010" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2010/default.aspx" /></entry><entry><title>Detecting Visual Studio 2008 Service Pack 1</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/05/29/detecting-visual-studio-2008-service-pack-1.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/05/29/detecting-visual-studio-2008-service-pack-1.aspx</id><published>2009-05-29T13:40:00Z</published><updated>2009-05-29T13:40:00Z</updated><content type="html">&lt;P&gt;The Visual Studio 2008 RTM and SP1 detection keys are largely the same as the &lt;A href="http://blogs.msdn.com/heaths/archive/2006/12/17/detecting-visual-studio-2005-service-pack-1.aspx" mce_href="http://blogs.msdn.com/heaths/archive/2006/12/17/detecting-visual-studio-2005-service-pack-1.aspx"&gt;Visual Studio 2005 SP1 detection keys&lt;/A&gt;, and are documented below. But there is a caveat for released and upcoming versions: the shared detection value can be overwritten by an older installation of the same release.&lt;/P&gt;
&lt;P&gt;For example, if you installed VS2008 Professional, then installed VS2008 SP1, and after that installed Team Foundation Client (TFC) 2008 RTM, the shared detection value is reset to 0 instead of 1. To be sure SP1 is installed, you need to detect SP1 on specific editions of Visual Studio 2008 or any other of our 2008 product releases including .NET 3.5 RTM and SP1.&lt;/P&gt;
&lt;H3&gt;Product family detection value&lt;/H3&gt;
&lt;P&gt;Product families define a group of products with similar functionality. The “VS” product family, for example, includes many editions but defines all full SKUs of the Visual Studio IDE. To find the service pack level of a product family, search for the following registry value.&lt;/P&gt;
&lt;P&gt;Key: &lt;CODE&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\[ProductFamily]\Servicing\9.0&lt;/CODE&gt; &lt;BR&gt;Value (REG_DWORD): &lt;CODE&gt;SP&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The exception is for product families “NetFX” and “WPF” that use version 3.5 instead of 9.0.&lt;/P&gt;
&lt;P&gt;If the registry value is 0, the RTM version of the product family is installed. If the value is 1, then SP1 is installed on the product family.&lt;/P&gt;
&lt;P&gt;Keep in mind, however, that this value is shared by all editions within a product family. If an older product edition is installed after a newer product edition within the same product family, the value will be overwritten. To detect whether SP1 is installed you need to check individual product editions.&lt;/P&gt;
&lt;P&gt;Product families released for the 2008 wave of products include,&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;NetFX, WPF: .NET Framework 2.0, 3.0, and 3.5 including Windows Presentation Framework &lt;/LI&gt;
&lt;LI&gt;RDBG: Visual Studio 2008 Remote Debugger &lt;/LI&gt;
&lt;LI&gt;TRIN: Visual Studio Tools for the Office System 3.0 Runtime &lt;/LI&gt;
&lt;LI&gt;VB: Visual Basic 2008 Express Edition &lt;/LI&gt;
&lt;LI&gt;VC: Visual C++ 2008 Express Edition &lt;/LI&gt;
&lt;LI&gt;VCS: Visual C# 2008 Express Edition &lt;/LI&gt;
&lt;LI&gt;VNS: Visual Web Developer 2008 Express Edition &lt;/LI&gt;
&lt;LI&gt;VS: Visual Studio 2008 Professional, Visual Studio Team System 2008 Team Suite, etc. &lt;/LI&gt;
&lt;LI&gt;VSTF: Visual Studio 2008 Team Explorer, Visual Studio 2008 Team Test Load Agent, etc. &lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Product edition detection value&lt;/H3&gt;
&lt;P&gt;A product family may install one or more editions. The “VS” product family, for example, contains several editions including “PRO” (Professional"), “VSTS” (Team Suite), and more. To find the service pack level of a product edition, search for the following registry value:&lt;/P&gt;
&lt;P&gt;Key: &lt;CODE&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\[ProductFamily]\Servicing\9.0\[ProductEdition]\[ProductLanguage]&lt;/CODE&gt; &lt;BR&gt;Value (REG_DWORD): &lt;CODE&gt;SP&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The exceptions are for product families “NetFX” and “WPF” that use version 3.5 instead of 9.0, and do not specify a ProductEdition. For .NET itself, the language is always 1033 unless you’re detecting the SP level for a language pack that uses the LCID for a specific culture.&lt;/P&gt;
&lt;P&gt;So for .NET, you would check the following registry value:&lt;/P&gt;
&lt;P&gt;Key: &lt;CODE&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\DevDiv\NetFX\Servicing\3.5\1033&lt;/CODE&gt; &lt;BR&gt;Value (REG_DWORD): &lt;CODE&gt;SP&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;For either Visual Studio or .NET, if the registry value is 0, the RTM versions of the product family are installed. If the value is 1, then SP1 is installed on the product family.&lt;/P&gt;
&lt;P&gt;The ProductLanguage is the LCID of the product installed, such as 1033 for English (US).&lt;/P&gt;
&lt;P&gt;The following table contains the list of released product families, editions, and the product names.&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=113&gt;&lt;STRONG&gt;ProductFamily&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width=116&gt;&lt;STRONG&gt;ProductEdition&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width=529&gt;&lt;STRONG&gt;ProductName&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;dynamicanalysis&lt;/TD&gt;
&lt;TD&gt;collectionbits&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Performance Collection Tools - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;HH&lt;/TD&gt;
&lt;TD&gt;DEX&lt;/TD&gt;
&lt;TD&gt;Microsoft Document Explorer 2008&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MSDN&lt;/TD&gt;
&lt;TD&gt;EXP&lt;/TD&gt;
&lt;TD&gt;MSDN Library for Microsoft Visual Studio 2008 Express Editions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MSDV&lt;/TD&gt;
&lt;TD&gt;MSDN9.0&lt;/TD&gt;
&lt;TD&gt;MSDN Library for Visual Studio 2008 - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;RDBG&lt;/TD&gt;
&lt;TD&gt;STD&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Remote Debugger - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;SDE&lt;/TD&gt;
&lt;TD&gt;VSD&lt;/TD&gt;
&lt;TD&gt;Microsoft Device Emulator version 3.0 - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;TRIN&lt;/TD&gt;
&lt;TD&gt;AIDE&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Tools for Applications 2.0 - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;TRIN&lt;/TD&gt;
&lt;TD&gt;ART&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Tools for Applications 2.0 Runtime&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;TRIN&lt;/TD&gt;
&lt;TD&gt;TRIR&lt;/TD&gt;
&lt;TD&gt;Visual Studio Tools for the Office system 3.0 Runtime&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VB&lt;/TD&gt;
&lt;TD&gt;ROS&lt;/TD&gt;
&lt;TD&gt;Microsoft Report Viewer Redistributable 2008&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VB&lt;/TD&gt;
&lt;TD&gt;EXP&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Basic 2008 Express Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VCS&lt;/TD&gt;
&lt;TD&gt;EXP&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual C# 2008 Express Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VC&lt;/TD&gt;
&lt;TD&gt;RED&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VC&lt;/TD&gt;
&lt;TD&gt;STD&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual C++ 2008 Standard Edition - enu&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VC&lt;/TD&gt;
&lt;TD&gt;EXP&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual C++ 2008 Express Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VNS&lt;/TD&gt;
&lt;TD&gt;EXP&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Web Developer 2008 Express Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSS&lt;/TD&gt;
&lt;TD&gt;STD&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual SourceSafe 2008 - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;vstf&lt;/TD&gt;
&lt;TD&gt;at&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Foundation Server - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSTF&lt;/TD&gt;
&lt;TD&gt;ATP&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Foundation Server Proxy - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSTF&lt;/TD&gt;
&lt;TD&gt;bb&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Foundation Server Build - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSTF&lt;/TD&gt;
&lt;TD&gt;dtea&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Test Load Agent- ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSTF&lt;/TD&gt;
&lt;TD&gt;dtec&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Test Load Controller- ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VSTF&lt;/TD&gt;
&lt;TD&gt;PERF&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Performance Tools - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;vstf&lt;/TD&gt;
&lt;TD&gt;tfc&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Explorer - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;vstf&lt;/TD&gt;
&lt;TD&gt;wssExt&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Team Foundation Server SharePoint Extensions - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;IDE&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Shell 2008 - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;IDE&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Shell (integrated mode) - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;PRO&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Professional Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;STD&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio 2008 Standard Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSDB&lt;/TD&gt;
&lt;TD&gt;Visual Studio Team System 2008 Database Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSR&lt;/TD&gt;
&lt;TD&gt;Microsoft Primary Interoperability Assemblies 2005&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSTA&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Team System 2008 Architecture Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSTD&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Team System 2008 Development Edition - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSTS&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Team System 2008 Team Suite - ENU&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;VS&lt;/TD&gt;
&lt;TD&gt;VSTT&lt;/TD&gt;
&lt;TD&gt;Microsoft Visual Studio Team System 2008 Test Edition – ENU&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;Detection in Windows Installer XML&lt;/H3&gt;
&lt;P&gt;&lt;A href="http://wix.sourceforge.net/" mce_href="http://wix.sourceforge.net"&gt;WiX&lt;/A&gt; v3 contains a number of properties to detect the SP level. &lt;A href="http://blogs.msdn.com/astebner" mce_href="http://blogs.msdn.com/astebner"&gt;Aaron Stebner&lt;/A&gt; has provided &lt;A href="http://blogs.msdn.com/astebner/archive/2009/04/09/9541845.aspx" mce_href="http://blogs.msdn.com/astebner/archive/2009/04/09/9541845.aspx"&gt;a good post that describes how&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9652576" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="WiX" scheme="http://blogs.msdn.com/heaths/archive/tags/WiX/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term="Detection" scheme="http://blogs.msdn.com/heaths/archive/tags/Detection/default.aspx" /><category term=".NET" scheme="http://blogs.msdn.com/heaths/archive/tags/.NET/default.aspx" /><category term="VS 2008 SP1" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2008+SP1/default.aspx" /></entry><entry><title>Updated log collection utility available for Visual Studio 2010 and .NET 4.0 Beta 1</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/05/22/updated-log-collection-utility-available-for-visual-studio-2010-and-net-4-0-beta-1.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/05/22/updated-log-collection-utility-available-for-visual-studio-2010-and-net-4-0-beta-1.aspx</id><published>2009-05-23T02:25:36Z</published><updated>2009-05-23T02:25:36Z</updated><content type="html">&lt;p&gt;Last Monday we &lt;a href="http://blogs.msdn.com/somasegar/archive/2009/05/18/visual-studio-2010-and-net-fx-4-beta-1-ships.aspx"&gt;shipped&lt;/a&gt; Visual Studio 2010 Beta 1 and .NET Framework 4.0 Beta 1 to MSDN customers, and made them &lt;a href="http://blogs.msdn.com/somasegar/archive/2009/05/18/visual-studio-2010-and-net-fx-4-beta-1-ships.aspx"&gt;publicly available&lt;/a&gt; Wednesday. More information about Visual Studio 2010 and .NET Framework 4.0 are &lt;a href="http://www.microsoft.com/visualstudio/products/2010/default.mspx"&gt;available on MSDN&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/astebner"&gt;Aaron Stebner&lt;/a&gt; has a good &lt;a href="http://blogs.msdn.com/astebner/archive/2009/05/20/9632923.aspx"&gt;collection of direct links&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;While we have worked hard to reduce install times and installation issues and hope you don’t encounter any, in case you do experience an issue we encourage you to gather and upload logs using our updated &lt;a href="http://go.microsoft.com/?LinkId=8967044"&gt;log collection utility&lt;/a&gt; available for &lt;a href="http://go.microsoft.com/?LinkId=8967043"&gt;download&lt;/a&gt;. This will automatically package a lot of logs and product information we can use to diagnose problems and compress them into &lt;nobr&gt;&lt;i&gt;%TEMP%\vslogs.cab&lt;/i&gt;&lt;/nobr&gt; by default. You can then open a bug from the &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;support site&lt;/a&gt; and attach logs one the bug is submitted.&lt;/p&gt;  &lt;p&gt;In an effort to reduce acquisition times by downloading only what you need for your machine instead of an entire DVD image, we have made web installers available for the following SKUs,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147408"&gt;Visual Studio 2010 Processional Beta 1 – Web Installer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147407"&gt;Visual Studio Team System 2010 Team Suite Beta 1 – Web Installer&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For help from the community and Microsoft engineers, please visit the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/VSPreRelease,netdevelopmentprerelease,visualstudioprerelease,vstsprerelease"&gt;forums for these beta 1 releases&lt;/a&gt;. We always appreciate your &lt;a href="http://go.microsoft.com/fwlink/?LinkID=151489"&gt;feedback&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9636234" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="News" scheme="http://blogs.msdn.com/heaths/archive/tags/News/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://blogs.msdn.com/heaths/archive/tags/.NET/default.aspx" /><category term="Diagnosing" scheme="http://blogs.msdn.com/heaths/archive/tags/Diagnosing/default.aspx" /></entry><entry><title>Patch Applicability</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/04/12/patch-applicability.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/04/12/patch-applicability.aspx</id><published>2009-04-13T09:32:32Z</published><updated>2009-04-13T09:32:32Z</updated><content type="html">&lt;p&gt;When &lt;a href="http://blogs.msdn.com/heaths/archive/2005/09/12/464047.aspx"&gt;installing a patch package&lt;/a&gt;, Windows Installer first determines if the patch is applicable. Depending on how the patch is installed, this happens a little differently. Windows Installer can determine the list of applicable products, or it can be told to which products the patch should be applied.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Possible products&lt;/h3&gt;  &lt;p&gt;To have Windows Installer determine to which products the patch applies, you can execute msiexec.exe with /update or /p as shown in the following example.&lt;/p&gt;  &lt;p&gt;msiexec.exe /update &lt;em&gt;patch.msp&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Windows Installer will enumerate the list of ProductCodes in the patch’s &lt;a href="http://msdn.microsoft.com/library/aa372070.aspx"&gt;Template summary property&lt;/a&gt;. The same behavior is true when calling the &lt;a href="http://msdn.microsoft.com/library/aa370060.aspx"&gt;MsiApplyPatch() function&lt;/a&gt; or the &lt;a href="http://msdn.microsoft.com/library/aa370059.aspx"&gt;MsiApplyMultiplePatches() function&lt;/a&gt; when the second parameter is null.&lt;/p&gt;  &lt;p&gt;You can also tell Windows Installer to which product the patch should applied using /package or /i as shown in the following example.&lt;/p&gt;  &lt;p&gt;msiexec.exe /package {&lt;em&gt;ProductCode&lt;/em&gt;} /update &lt;em&gt;patch.msp&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;For the specified ProductCode or product package, Windows Installer will build the &lt;a href="http://msdn.microsoft.com/library/aa370576.aspx"&gt;PATCH property&lt;/a&gt; and pass that in the command line similar to executing msiexec.exe as shown in the following example. When using the PATCH property, the full paths to each patch must be supplied.&lt;/p&gt;  &lt;p&gt;msiexec.exe /package {&lt;em&gt;ProductCode&lt;/em&gt;} PATCH=&lt;em&gt;full\path\patch.msp&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Windows Installer will evaluate each patch against the specified product. However, if installing the patch or patches using MsiApplyMultiplePatches() with a specific ProductCode, Windows Installer will modify the PATCH property to list only the patch packages with the specified ProdutCode in their Template summary property. If you’re not sure which patches apply to a product, this may be desirable behavior. If you pass in the PATCH property yourself and even one patch does not apply to the specified ProductCode, Windows Installer will terminate and return ERROR_PATCH_TARGET_NOT_FOUND (1642).&lt;/p&gt;  &lt;h3&gt;Verifying applicability&lt;/h3&gt;  &lt;p&gt;Once the list of patches has been passed into the installation session, Windows Installer will enumerate the transforms in each patch being applied. If a minor upgrade patch is being installed, Windows Installer will also enumerate the transforms in patches that have already been applied because minor upgrade may &lt;a href="http://blogs.msdn.com/heaths/archive/2006/06/14/631423.aspx"&gt;change which patches are applicable&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/heaths/archive/2005/09/01/459561.aspx"&gt;Within a patch package are sets of transforms&lt;/a&gt;: there is an authoring transform that describes the changes to the product, and a patch transform that describes how to install the patch and &lt;a href="http://blogs.msdn.com/heaths/archive/2006/05/19/file-sequencing-and-how-files-are-located.aspx"&gt;which files are updated&lt;/a&gt;. These transforms have the same name except the patch transform name begins with a hash (#).&lt;/p&gt;  &lt;p&gt;Windows Installer will enumerate each authoring transform, using the following applicability information from their summary information stream.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/aa367853.aspx"&gt;Character Count summary property&lt;/a&gt;: the upper 16 bits (word) contain the validation flags, and the lower 16 bits contain the error conditions. These flags are documented in detail for the &lt;a href="http://msdn.microsoft.com/library/aa370073.aspx"&gt;MsiCreateTransformSummaryInfo() function&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/aa369749.aspx"&gt;Last Saved By summary property&lt;/a&gt;: the platform and language of the product after it has been transformed. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/aa371255.aspx"&gt;Revision Number summary property&lt;/a&gt;: the ProductCode, ProductVersion, and UpgradeCode of the target product database, and the new ProductCode and ProductVersion of the product after transformation. Changing the UpgradeCode in a patch is &lt;a href="http://msdn.microsoft.com/library/aa367571.aspx"&gt;not recommended&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/aa372070.aspx"&gt;Template summary property&lt;/a&gt;: the platform and language of the target product database. This value may be left blank if the transform does not validate the language. Windows Installer does not currently support validation of the platform. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The transform validation bits in the Character Count summary property determine which other summary properties are relevant. The typical validation bits of 0x0922 specify that the target ProductCode and UpgadeCode are equal to those specified in the Revision Number summary property of the transform, and that the full ProductVersion is equal to the value also in the Revision Number summary property. It’s also important to note that Windows Installer only validates up to the first three fields of the ProductVersion. The fourth field can be changed freely in a small update as a means of tracking and diagnosing updates.&lt;/p&gt;  &lt;p&gt;If the ProductLanguage was validated, the ProductLanguage of the target product must match the value in the Template summary property.&lt;/p&gt;  &lt;p&gt;When an authoring transform has been validated as applicable to the current product, the related patch transform is assumed to be applicable (validation bits are ignored). The remaining transforms in a patch are ignored, though Windows Installer will still log verbose validation information for each remaining transform.&lt;/p&gt;  &lt;p&gt;If a valid transform is found within a patch, the patch is applicable to the product. That still doesn’t mean the patch will be applied, however, since the patch must still be sequenced and supersedence determined. But if a patch is applicable, it will at least be registered to the product. This means that it may be applied in the future if other patches are installed or removed from the product, and that it will be uninstalled with the product. However, since a single patch package is cached for all applicable products, the patch package itself is not deleted from the system until all products to which it’s registered are uninstalled or the patch is uninstalled from all applicable products.&lt;/p&gt;  &lt;p&gt;Once all applicable patched are determined, a verbose log will display applicable, obsolesced, superseded, and invalid patches as shown in the following log example.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;MSI (c) (88:38) [21:17:01:707]: Final Patch Application Order:      &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: {C26A5DDB-E2C5-4D2E-BC6E-449CBA57184E} -       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: {A4AC638D-2C4F-4C9E-8962-9A674E782259} -       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: {C697D8F7-E77A-4DA1-9CED-3F3E5115400D} - c:\Users\Test\AppData\Local\Temp\patch1.msp       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: {73F7C9E3-08EC-4910-8D5B-3BF90C07EC1C} -       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: Other Patches:       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: Superseded: {B45F8725-6450-44D0-9284-01F321026767} -       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: Superseded: {B0BB7DD1-D63A-4B73-8E73-6F055CB541AC} -       &lt;br /&gt;MSI (c) (88:38) [21:17:01:707]: Unknown\Absent: {402ADF4A-1B3D-4824-AE69-3606DDC2CE70} - c:\Users\Test\AppData\Local\Temp\patch2.msp&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;The names of the valid transforms are also registered to the product to save time by not re-evaluating applicable patches and transforms again during repair operations. The names of the valid transforms can be retrieved using the &lt;a href="http://msdn.microsoft.com/library/aa370130.aspx"&gt;MsiGetProductInfo()&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/library/aa370131.aspx"&gt;MsiGetProductInfoEx() functions&lt;/a&gt; with the INSTALLPROPERTY_TRANSFORMS property.&lt;/p&gt;  &lt;h3&gt;Transforming the database&lt;/h3&gt;  &lt;p&gt;Windows Installer will not actually modify the target database unless applying the patch to an administrative installation, which is created by using msiexec.exe /a. The vast majority of time, you will install a patch on a client machine.&lt;/p&gt;  &lt;p&gt;Windows Installer will create views on the product database transformed by each applied transform. When Windows Installer queries the package for information, typically the transforms will add to, update, or remove data and tables. However, the transform error condition flags will fail the installation if not satisfied. With the typical transform error condition flags of 0x001f, Windows Installer will only err if the transforms attempt to change the database code page.&lt;/p&gt;  &lt;h3&gt;Order of events&lt;/h3&gt;  &lt;p&gt;Determining patch applicability and validating transforms always occurs before installation execution begins. Any code that needs to modify the list of patches must execute before installing or updating a product. This includes calling APIs like the &lt;a href="http://msdn.microsoft.com/library/aa370315.aspx"&gt;MsiInstallProduct() function&lt;/a&gt;. Custom actions scheduled to execute during installation cannot modify the list of patches, and returning an error from any custom action added by a patch will terminate the entire installation session.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9546739" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="Logging" scheme="http://blogs.msdn.com/heaths/archive/tags/Logging/default.aspx" /><category term="Essentials" scheme="http://blogs.msdn.com/heaths/archive/tags/Essentials/default.aspx" /></entry><entry><title>Microsoft .NET 1.x and Visual Studio 7.x patches may fail to uninstall</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/03/12/microsoft-net-1-x-and-visual-studio-7-x-patches-may-fail-to-uninstall.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/03/12/microsoft-net-1-x-and-visual-studio-7-x-patches-may-fail-to-uninstall.aspx</id><published>2009-03-13T02:54:37Z</published><updated>2009-03-13T02:54:37Z</updated><content type="html">&lt;p&gt;When attempting to uninstall a patch from the products listed in the &lt;strong&gt;Applies To&lt;/strong&gt; section below, the following error may occur.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Internal Error 2771. M953297&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The last part of the error message will vary with each patch, where the last 6 digits are the knowledge base article related to the patch.&lt;/p&gt;  &lt;h3&gt;Applies To&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft .NET Framework 1.0 &lt;/li&gt;    &lt;li&gt;Microsoft .NET Framework 1.1 &lt;/li&gt;    &lt;li&gt;Microsoft Visual Studio .NET 2002 &lt;/li&gt;    &lt;li&gt;Microsoft Visual Studio .NET 2003 &lt;/li&gt;    &lt;li&gt;Microsoft Visual C++ .NET 2003 &lt;/li&gt;    &lt;li&gt;Microsoft Visual C# .NET 2003 &lt;/li&gt;    &lt;li&gt;Microsoft Visual Basic .NET 2003 &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Workaround&lt;/h3&gt;  &lt;p&gt;One possible reason the error has occurred is because a system policy is set. You can temporarily disable this system policy and attempt to reinstall the patch.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Warning&lt;/b&gt; If you use Registry Editor incorrectly, you may cause serious problems that may require you to reinstall your operating system. Microsoft cannot guarantee that you can solve problems that result from using Registry Editor incorrectly. Use Registry Editor at your own risk.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You need to disable the &lt;a href="http://msdn.microsoft.com/library/aa368364.aspx"&gt;EnforceUpgradeComponentRules&lt;/a&gt; Windows Installer system policy using the steps below.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt; and then click &lt;strong&gt;Run&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Open&lt;/strong&gt; box, type &lt;em&gt;regedit.exe&lt;/em&gt; and click &lt;strong&gt;OK&lt;/strong&gt;. If you are prompted with a User Account Control (UAC) dialog, please authenticate as an administrator or click &lt;strong&gt;Continue&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Browse to the key &lt;code&gt;HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer&lt;/code&gt;. &lt;/li&gt;    &lt;li&gt;Delete the registry value &lt;code&gt;EnforceUpgradeComponentRules&lt;/code&gt; and close the registry editor. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt; and then click &lt;strong&gt;Run&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Open&lt;/strong&gt; box, type &lt;em&gt;services.msc&lt;/em&gt; and click &lt;strong&gt;OK&lt;/strong&gt;. If you are prompted with a User Account Control (UAC) dialog, please authenticate as an administrator or click &lt;strong&gt;Continue&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Right click on &lt;strong&gt;Windows Installer&lt;/strong&gt; and click on &lt;strong&gt;Stop&lt;/strong&gt;. It is okay if the &lt;strong&gt;Stop&lt;/strong&gt; button is disable: the service was already stopped. &lt;/li&gt;    &lt;li&gt;Attempt to reinstall the patch. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;To optionally re-enable the EnforceUpgradeComponentRules system policy, follow the steps below.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt; and then click &lt;strong&gt;Run&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Open&lt;/strong&gt; box, type &lt;em&gt;regedit.exe&lt;/em&gt; and click &lt;strong&gt;OK&lt;/strong&gt;. If you are prompted with a User Account Control (UAC) dialog, please authenticate as an administrator or click &lt;strong&gt;Continue&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Browse to the key &lt;code&gt;HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer&lt;/code&gt;. &lt;/li&gt;    &lt;li&gt;Right click on the &lt;code&gt;Installer&lt;/code&gt; key and select &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;DWORD&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Type the name &lt;code&gt;EnforceUpgradeComponentRules&lt;/code&gt; and press &lt;strong&gt;Enter&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Double click the value you just created, then type 1 and press &lt;strong&gt;Enter&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Close the registry editor. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Details&lt;/h3&gt;  &lt;p&gt;Patches created for the products listed in the &lt;strong&gt;Applies To&lt;/strong&gt; section above support the appearance of uninstall by installing an obsolescing patch and installing older baseline files. Back when these products were first released and entered the servicing lifecycle, Windows Installer did not support real patch uninstall. The only way to uninstall patches back then was to installing a patch that obsolesces (the predecessor to supersedence) another patch, optionally carrying a file payload to avoid prompts for source to replace older files. This is shown in the log fragment below where the &amp;quot;anti-patch&amp;quot; &lt;code&gt;{D5C479FB-3609-4A1D-A106-830635BF50B0}&lt;/code&gt; obsolesces the related patch &lt;code&gt;{AAC3F1F0-5649-4670-A698-F1523729F015}&lt;/code&gt;.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;MSI (c) (14:DC) [02:44:31:310]: Final Patch Application Order:      &lt;br /&gt;MSI (c) (14:DC) [02:44:31:310]: {411EDCF7-755D-414E-A74B-3DCD6583F589} -       &lt;br /&gt;MSI (c) (14:DC) [02:44:31:310]: {D5C479FB-3609-4A1D-A106-830635BF50B0} - D:\Users\Test\AppData\Local\Temp\MSPE928.tmp       &lt;br /&gt;MSI (c) (14:DC) [02:44:31:310]: Other Patches:       &lt;br /&gt;MSI (c) (14:DC) [02:44:31:310]: Obsolete: {AAC3F1F0-5649-4670-A698-F1523729F015} - &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;So because another patch is being installed, it &lt;a href="http://blogs.msdn.com/heaths/archive/2006/01/23/516457.aspx"&gt;cannot remove components from an existing feature&lt;/a&gt;. When the EnforceUpgradeComponentRules Windows Installer system policy is set, the installation will fail as shown below.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;MSI (s) (EC:C8) [02:44:34:835]: Machine policy value 'EnforceUpgradeComponentRules' is 1      &lt;br /&gt;MSI (s) (EC:C8) [02:44:34:835]: SELMGR: Component 'DDPatch.UpdateGac' is registered to feature 'M953297', but is not present in the FeatureComponents table.&amp;#160; Removal of components from a feature is not supported!       &lt;br /&gt;MSI (s) (EC:C8) [02:44:34:835]: Note: 1: 2771 2: M953297&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;This does not otherwise pose a problem because the patch is being uninstalled and the feature affected is specific only to that patch. And if the patch is reinstalled, the feature is explicitly added locally by a custom action anyway since Windows Installer back then also did not automatically determine feature actions during patch installation.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9472376" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="Logging" scheme="http://blogs.msdn.com/heaths/archive/tags/Logging/default.aspx" /><category term="Visual Studio" scheme="http://blogs.msdn.com/heaths/archive/tags/Visual+Studio/default.aspx" /><category term=".NET" scheme="http://blogs.msdn.com/heaths/archive/tags/.NET/default.aspx" /></entry><entry><title>Why does ICE03 state my localized template string is invalid?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/02/13/why-does-ice03-state-my-localized-template-string-is-invalid.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/02/13/why-does-ice03-state-my-localized-template-string-is-invalid.aspx</id><published>2009-02-13T12:35:31Z</published><updated>2009-02-13T12:35:31Z</updated><content type="html">&lt;h3&gt;Question&lt;/h3&gt;  &lt;p&gt;When I run ICE validation, why does ICE03 state the following error?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ICE03 ERROR Invalid template string; Table: Error, Column: Message, Key(s): 1958&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The string reads,&lt;/p&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;ユーザー [2] の特権が不十分です。必要な特権をユーザーに付与してインストールを続行しますか? [いいえ] を選択するとインストールは終了します。&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Answer&lt;/h3&gt;  &lt;p&gt;This ICE error can appear in several columns in several tables that use the &lt;a href="http://msdn.microsoft.com/library/aa368609.aspx"&gt;Formatted column type&lt;/a&gt; or a derivative, like the &lt;a href="http://msdn.microsoft.com/library/aa372068.aspx"&gt;Template column type&lt;/a&gt; used by the Message column of the Error table shown above. Formatted column types allow properties to be inserted between square brackets while the Template column type additionally allows field numbers to be inserted between square brackets. But because properties are of the &lt;a href="http://msdn.microsoft.com/library/aa369212.aspx"&gt;Identifier column type&lt;/a&gt; which allows only alphanumeric ASCII characters, the period (.), and underscores (_), unsupported characters cannot appear between square brackets in a Formatted column type or its derivative.&lt;/p&gt;  &lt;p&gt;Take a closer look at the highlighted substring below,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ユーザー [2] の特権が不十分です。必要な特権をユーザーに付与してインストールを続行しますか? &lt;span style="background-color: yellow" class="highlight"&gt;[いいえ]&lt;/span&gt; を選択するとインストールは終了します。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Since that is not a valid property identifier, ICE03 pumps an error message to the validation message handler because it knows from the &lt;a href="http://msdn.microsoft.com/library/aa372930.aspx"&gt;_Validation table&lt;/a&gt; that the containing column is a Formatted column.&lt;/p&gt;  &lt;p&gt;To resolve this issue, escape the square brackets using [\[] in place of [ and [\]] in place of ] as shown below.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ユーザー [2] の特権が不十分です。必要な特権をユーザーに付与してインストールを続行しますか? &lt;span style="background-color: yellow" class="highlight"&gt;[\[]&lt;/span&gt;いいえ&lt;span style="background-color: yellow" class="highlight"&gt;[\]]&lt;/span&gt; を選択するとインストールは終了します。&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9418045" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="Mailbag" scheme="http://blogs.msdn.com/heaths/archive/tags/Mailbag/default.aspx" /><category term="FAQ" scheme="http://blogs.msdn.com/heaths/archive/tags/FAQ/default.aspx" /></entry><entry><title>Changes to Package Caching in Windows Installer 5.0</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/02/02/changes-to-package-caching-in-windows-installer-5-0.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/02/02/changes-to-package-caching-in-windows-installer-5-0.aspx</id><published>2009-02-03T04:57:21Z</published><updated>2009-02-03T04:57:21Z</updated><content type="html">&lt;p&gt;Windows Installer 5.0 is shipping in Windows 7 as part of the operating system. To address the issue where the User Account Control consent dialog is displayed with an “Unidentified Publisher”, the &lt;em&gt;.msi&lt;/em&gt; package is cached in its entirety.&lt;/p&gt;  &lt;p&gt;Prior to Windows Installer 5.0, installation packages, or &lt;em&gt;.msi&lt;/em&gt; files, were &lt;a href="http://blogs.msdn.com/heaths/archive/2005/11/29/498018.aspx"&gt;stripped of their embedded cabinets&lt;/a&gt; – if any – when cached on the system to save space. When repairing the product, if installed files were missing then Windows Installer would attempt to use the last used source location, an application-defined location, or &lt;a href="http://blogs.msdn.com/heaths/archive/2005/12/02/499495.aspx"&gt;prompt&lt;/a&gt; for the installation source. While these prompts can be annoying or even difficult to resolve sometimes, they do reduce the disk space required after an installation is complete.&lt;/p&gt;  &lt;p&gt;When Vista added UAC, elevation even for administrators by default was required. Elevation was always required for per-machine installations, but administrator accounts already ran with full privileged tokens so elevation was implicit. To add validation to this elevation prompt - aka the consent dialog - the publisher for signed packages was displayed, and “Unidentified Publisher” was displayed for unsigned packages. But during uninstall, packages would display “Unidentified Publisher” even if they were signed because their embedded cabinets were stripped thus invalidating the digital signature and so Windows Installer wouldn’t verify the cached package as shown below using Windows Installer 4.5 on Vista.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;MSI (s) (DC:0C) [16:46:44:058]: MSI_LUA: Elevation required to install product, will prompt for credentials      &lt;br /&gt;MSI (s) (DC:0C) [16:46:44:059]: MSI_LUA: Entering Credential Request. hwnd = 1120166, MsiAction = 2, productname = Microsoft Visual Studio Team System 2008 Team Suite - ENU, version = 9.0.30729, language = 1033, manufacturer = Microsoft Corporation       &lt;br /&gt;MSI (s) (DC:0C) [16:46:44:059]: MSI_LUA:&amp;#160; (continued)... &lt;span style="background: yellow" class="highlight"&gt;packagepath = &lt;/span&gt;, packagesource = , dwUpdates = 0&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;To resolve this issue, Windows Installer 5.0 in Windows 7 will cache the installation packages without stripping their embedded cabinets and verify the cached package as shown below using Windows Installer 5.0 on Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;MSI (s) (20:98) [16:51:25:386]: MSI_LUA: Elevation required to install product, will prompt for credentials      &lt;br /&gt;MSI (s) (20:98) [16:51:25:386]: MSI_LUA: Entering Credential Request. hwnd = 1116208, MsiAction = 2, productname = Microsoft Visual Studio Team System 2008 Team Suite - ENU, version = 9.0.30729, language = 1033, manufacturer = Microsoft Corporation       &lt;br /&gt;MSI (s) (20:98) [16:51:25:386]: MSI_LUA:&amp;#160; (continued)... &lt;span style="background: yellow" class="highlight"&gt;packagepath = C:\Windows\Installer\33e5a8b.msi&lt;/span&gt;, packagesource = C:\Windows\Installer\33e5a8b.msi, dwUpdates = 0&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;But this won’t prevent prompts for source even if all files are compressed into embedded cabinets. Windows Installer 5.0 does not consider the Installer-cached &lt;em&gt;.msi&lt;/em&gt; files to be valid source and will still resolve possible source locations or prompt as it has in the past.&lt;/p&gt;  &lt;p&gt;Installation developers should take this into account since &lt;a href="http://blogs.msdn.com/heaths/archive/2008/07/24/why-windows-installer-may-require-so-much-disk-space.aspx"&gt;Windows Installer already may require so much disk space&lt;/a&gt; and compress files if necessary in external cabinets. Consider your servicing scenarios carefully and determine if you should cache the installation source yourself using the Source List APIs like &lt;a href="http://msdn.microsoft.com/en-us/library/aa370395.aspx"&gt;MsiSourceListAddSource&lt;/a&gt; provided by Windows Installer, or just let Windows Installer use its default &lt;a href="http://msdn.microsoft.com/en-us/library/aa371859.aspx"&gt;source resiliency&lt;/a&gt; behavior.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9392349" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="UAC" scheme="http://blogs.msdn.com/heaths/archive/tags/UAC/default.aspx" /><category term="Logging" scheme="http://blogs.msdn.com/heaths/archive/tags/Logging/default.aspx" /><category term="Windows 7" scheme="http://blogs.msdn.com/heaths/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Feature Changes in Visual Studio 2008 SP1 may prompt for SQLSysClrTypes.msi</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/heaths/archive/2009/02/02/feature-changes-in-visual-studio-2008-sp1-may-prompt-for-sqlsysclrtypes-msi.aspx" /><id>http://blogs.msdn.com/heaths/archive/2009/02/02/feature-changes-in-visual-studio-2008-sp1-may-prompt-for-sqlsysclrtypes-msi.aspx</id><published>2009-02-03T00:02:11Z</published><updated>2009-02-03T00:02:11Z</updated><content type="html">&lt;p&gt;After installing &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;Visual Studio 2008 Service Pack 1&lt;/a&gt;, adding or removing features from Visual Studio may prompt for the file &lt;em&gt;SQLSysClrTypes.msi&lt;/em&gt; with the following text:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Setup is looking for file SQLSysClrTypes.msi.      &lt;br /&gt;Please insert Microsoft Visual Studio Team System 2008 Team Suite – ENU disk 1 now.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The text will read differently depending if you have Visual Studio 2008 Professional Edition or another edition or language installed.&lt;/p&gt;  &lt;h3&gt;Workaround&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;SQLSysClrTypes.msi&lt;/em&gt; is a product package installed with VS2008 SP1. To satisfied this prompt you’ll need to obtain that file again.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/heaths/archive/2008/05/14/how-to-download-all-of-visual-studio-2008-sp1.aspx"&gt;Download a complete layout&lt;/a&gt; of VS2008 SP1 if you haven’t already. &lt;/li&gt;    &lt;li&gt;Open the directory were you copied VS2008 SP1. &lt;/li&gt;    &lt;li&gt;Right click on &lt;em&gt;SQLSysClrTypes.msi&lt;/em&gt; and select &lt;strong&gt;Copy&lt;/strong&gt;.&lt;/li&gt;    &lt;li&gt;Open an Explorer window (ex: &lt;strong&gt;Windows&lt;/strong&gt; key + &lt;strong&gt;E&lt;/strong&gt;) and browse to the directory where you installed Visual Studio 2008. By default this is “C:\Program Files\Microsoft Visual Studio 9.0” where C:\ is your system drive.&lt;/li&gt;    &lt;li&gt;Double click on the folder that corresponds to the name of the product you installed (ex: “Microsoft Visual Studio Team System 2008 Team Suite – ENU”).&lt;/li&gt;    &lt;li&gt;Right click on empty space in the window, click &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;Folder&lt;/strong&gt;, and type “wcu” (without quotes). &lt;/li&gt;    &lt;li&gt;Double click that new “wcu” folder to open it. &lt;/li&gt;    &lt;li&gt;Right click on empty space in the window, click &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;Folder&lt;/strong&gt;, and type “smo” (without quotes). &lt;/li&gt;    &lt;li&gt;Double click that new “smo” folder to open it. &lt;/li&gt;    &lt;li&gt;Right click on empty space in the window and click &lt;strong&gt;Paste&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the dialog prompt requesting &lt;em&gt;SQLSysClrTypes.msi&lt;/em&gt;, click the &lt;strong&gt;Browse&lt;/strong&gt; button. &lt;/li&gt;    &lt;li&gt;Expand folders to select the directory you opened in step 5 and click the &lt;strong&gt;OK&lt;/strong&gt; button. Do not select the “wcu\smo” directory you created. &lt;/li&gt;    &lt;li&gt;Click the &lt;strong&gt;OK&lt;/strong&gt; button on the dialog prompt. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;On 64-bit machines you will always see this prompt when adding or removing features so it is recommended you keep this file for future use. If you are a network administrator or have the installation source copied to your hard drive, you can also create this directory in the root of the original installation source directory and the setup executable will automatically find &lt;em&gt;SQLSysClrTypes.msi&lt;/em&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9391494" width="1" height="1"&gt;</content><author><name>heaths</name><uri>http://blogs.msdn.com/members/heaths.aspx</uri></author><category term="Installation" scheme="http://blogs.msdn.com/heaths/archive/tags/Installation/default.aspx" /><category term="64-bit" scheme="http://blogs.msdn.com/heaths/archive/tags/64-bit/default.aspx" /><category term="VS 2008 SP1" scheme="http://blogs.msdn.com/heaths/archive/tags/VS+2008+SP1/default.aspx" /></entry></feed>