<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Brian Rogers: Removing complexity...</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/icumove/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/icumove/feed.xml</link>
    <description>Mixing emerging technologies with current needs to bridge the technology gaps in business</description>
    <lastBuildDate>Wed, 17 Apr 2019 04:06:50 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Troubleshooting Red ‘X’s in the Compact 7 Installation</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/troubleshooting-red-xs-in-the-compact-7-installation</link>
      <pubDate>Fri, 12 Aug 2011 02:40:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2011/08/12/troubleshooting-red-xs-in-the-compact-7-installation/</guid>
      <description><![CDATA[Hey everyone, we have been fielding some questions about installation requirements for Compact 7. I...]]></description>
      <content:encoded><![CDATA[<p>Hey everyone, we have been fielding some questions about installation requirements for Compact 7. I had <a href="https://krakllc.wordpress.com/" target="_blank">Kyle Roe</a> write up some general troubleshooting instructions for you.</p>  <hr />  <p>As with all software installations, there are times when WindowsEmbeddedCompact7.exe cannot complete the install successfully. Great effort has been made prevent the installation from failing. Sometimes the installation requires other software to be installed first. In the case of Platform Builder, Visual Studio 2008 and Visual Studio 2008 SP1 are the prerequisites. Windows Embedded Compact 7 will search for the prerequisites when it starts. This is part of the action taken while the Splash screen is displayed. ( as a side note, the Splash screen can be moved to show the program has not locked up.)</p>  <p>So what happens if the prerequisites are not found?</p>  <p>You, the user, will see Red X’s next to options that require prerequisites to be meet.</p>  <p>RTM display.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/1538.clip_image001_189DEDD4.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/1538.clip_5F00_image001_5F00_189DEDD4.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/3276.clip_image001_thumb_4D3E4A0F.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/3276.clip_5F00_image001_5F00_thumb_5F00_4D3E4A0F.jpg" width="321" height="211" /></a></p>  <p>With the updated software, a message is displayed explaining what prerequisites are required.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/0636.clip_image002_461F0D97.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/0636.clip_5F00_image002_5F00_461F0D97.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/6087.clip_image002_thumb_05E8F41D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/6087.clip_5F00_image002_5F00_thumb_5F00_05E8F41D.jpg" width="329" height="217" /></a></p>  <p>So why is Shared Source greyed out with a red X next to it when all the prerequisites are installed?</p>  <p>Evaluation copies of the software do not come with Shared Source. But you can access more information about Shared Source right from the link the description field.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/8176.clip_image003_2CB70A5D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/8176.clip_5F00_image003_5F00_2CB70A5D.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image003" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/3362.clip_image003_thumb_3E939E2A.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/3362.clip_5F00_image003_5F00_thumb_5F00_3E939E2A.jpg" width="343" height="227" /></a></p>  <p>If you are still having trouble with WindowsEmbeddedCompact7.exe, you can either reach out help, or investigate the issue yourself. For both options you will need to access the log files that the software creates. These log files are in the user profile temp folder, of the user who ran the software. The easiest way to get to that folder is to click on Start and Select Run.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/7870.clip_image004_377461B2.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/7870.clip_5F00_image004_5F00_377461B2.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/7802.clip_image004_thumb_3055253A.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/7802.clip_5F00_image004_5F00_thumb_5F00_3055253A.jpg" width="244" height="143" /></a></p>  <p>In the text window type %temp%, click Ok.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/2287.clip_image005_57233B7A.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/2287.clip_5F00_image005_5F00_57233B7A.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image005" border="0" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/3757.clip_image005_thumb_64F58175.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/3757.clip_5F00_image005_5F00_thumb_5F00_64F58175.jpg" width="377" height="206" /></a></p>  <p>That will open your temp folder and you should see the log files listed.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/3771.clip_image006_2FE8F245.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/3771.clip_5F00_image006_5F00_2FE8F245.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/0636.clip_image006_thumb_3DBB3840.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/0636.clip_5F00_image006_5F00_thumb_5F00_3DBB3840.jpg" width="313" height="193" /></a></p>  <p>All four of log files shown were created by the software. When some prerequisites are not found, an entry like the highlighted one here will explain why you are having a problem.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/1207.clip_image007_4B8D7E3B.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/1207.clip_5F00_image007_5F00_4B8D7E3B.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image007" border="0" alt="clip_image007" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/8154.clip_image007_thumb_1680EF0B.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/8154.clip_5F00_image007_5F00_thumb_5F00_1680EF0B.jpg" width="377" height="29" /></a></p>  <p>The snippet above is an entry showing that Visual Studios 2008 could not be found on the computer.</p>  <p>When Visual Studios 2008 is found at the proper version, an entry like this can be found in the log. <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/0624.clip_image008_7665E24D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/0624.clip_5F00_image008_5F00_7665E24D.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/7571.clip_image008_thumb_04382849.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-26-19-metablogapi/7571.clip_5F00_image008_5F00_thumb_5F00_04382849.jpg" width="346" height="24" /></a></p>  <p>If you are having issues, I hope this helps explain how to trouble shoot it. In our efforts, we have attempted to prevent as many issues as we can, and present as much information as possible when the issue can not be prevented. Let me know how we are doing.</p>]]></content:encoded>
    </item>
    <item>
      <title>Updating Windows Embedded Compact 7</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/updating-windows-embedded-compact-7</link>
      <pubDate>Wed, 27 Jul 2011 03:07:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2011/07/27/updating-windows-embedded-compact-7/</guid>
      <description><![CDATA[Hey Everyone, I realize this blog writing is a bit late since we have already shipped the Remote FX...]]></description>
      <content:encoded><![CDATA[<p>Hey Everyone, I realize this blog writing is a bit late since we have already shipped the Remote FX update but I am still happy to get it out. <a href="https://krakllc.wordpress.com" target="_blank">Kyle Roe</a> has put together an blog entry on how to update your Compact 7 installation. It also goes over some details on configuring WEDU so you can get automatic notifications. Please visit Kyle’s blog to find out more details.</p>  <h3>Blog Entry</h3>  <h3><a title="https://krakllc.wordpress.com/2011/07/25/updating-windows-embedded-compact-7/" href="https://krakllc.wordpress.com/2011/07/25/updating-windows-embedded-compact-7/">https://krakllc.wordpress.com/2011/07/25/updating-windows-embedded-compact-7/</a></h3>]]></content:encoded>
    </item>
    <item>
      <title>Windows Embedded Compact 7 Evaluation Download</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/windows-embedded-compact-7-evaluation-download</link>
      <pubDate>Wed, 02 Mar 2011 05:50:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2011/03/02/windows-embedded-compact-7-evaluation-download/</guid>
      <description><![CDATA[Hey everyone, it is with great joy that I tell you Windows Embedded Compact 7 has been released. It...]]></description>
      <content:encoded><![CDATA[<p>Hey everyone, it is with great joy that I tell you <a href="https://www.microsoft.com/windowsembedded/en-us/downloads/download-windows-embedded-compact-ce.aspx" target="_blank">Windows Embedded Compact 7</a> has been released. It has been well over 8 months since I last posted about the product's status. I am happy to do so now and hope that you test the download and installation experiences. Your feedback will help us improve the product experience. </p>  <p>Here are a couple ways you could help me out.</p>  <p>Our installer, the engine, writes all the logs to the <a href="https://msdn.microsoft.com/en-us/library/bb776892(VS.85).aspx" target="_blank">user’s profile temporary directory</a>. Typically this would be the environment variable %temp%. In the instance of WindowsEmbeddedCompact7.exe and WindowsEmbeddedSilverlightTools.exe, we create log files which remove the .exe and add .nnnn.log. So the full string would look something like WindowsEmbeddedCompact7.0001.log.</p>  <p>If you are familiar with Windows API calls and error codes, you should be able to scan the logs and find errors and issues that will help you address the problem you are seeing. If you aren’t familiar with the above, please feel free contact me through this blog by sending me a direct email and I will try to help you directly. </p>  <p>One item I've already found involves the physical product discs. In Compact 7 we introduced a new feature called the <a href="https://www.microsoft.com/windowsembedded/en-us/develop/windows-embedded-compact-7-developer-update.aspx" target="_blank">Windows Embedded Developer Update</a>. The developer update functionality is installed as a Visual Studio add-in during the Compact 7 installation. We have noticed an irregular occurrence that, after the Compact 7 installation has completed and within the same user session (i.e., the user hasn't logged off or rebooted since completing the install) when starting Visual Studio, users may see a Windows dialog saying, “There is no disk in drive. Please insert a disk into drive D.” This occurs when the Windows Embedded Developer Update checks for an update on-line. So far, we've only been able to reproduce this when the user has removed the disc from the drive and hasn't yet rebooted or logged off after completing the install. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/3187.Windows_No_Disk_345F9E98.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-26-19-metablogapi/3187.Windows_5F00_No_5F00_Disk_5F00_345F9E98.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WindowsEmbeddedCompact7.exe - No Disk" border="0" alt="There is no disk in the drive. Please insert a disk into drive D:." src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/0447.Windows_No_Disk_thumb_09C3BDBB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-26-19-metablogapi/0447.Windows_5F00_No_5F00_Disk_5F00_thumb_5F00_09C3BDBB.png" width="475" height="187" /></a></p>  <p>The root issue is straightforward. Windows is simply looking for a disk to be in your CD/DVD drive. This prompt can be dismissed by placing any disc in the drive. It does not need to be the Compact 7 installer disc. We're fixing this right now so that the operating system won't look for a disc in the drive when starting the Windows Embedded Developer Update. We are running the fix through an extended test cycle. If you experience this, please do write me (via this blog) so I can learn more about how it occurred on your system and provide assistance as needed. </p>  <p><strong>Here are three simple workarounds:</strong> Either click the continue button 41 times (once for each MSI in Compact 7) or put any disc at all into your disc drive or log off and then log back into the user account. Any of these will dismiss the message and allow for the <a href="https://www.microsoft.com/windowsembedded/en-us/develop/windows-embedded-compact-7-developer-update.aspx" target="_blank">Windows Embedded Developer Update</a> to continue checking online for new updates. </p>  <p>I will update this post as soon as we release this fix to the field. Your comments and feedback are most welcome.</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Embedded Compact 7 Setup Public CTP</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/windows-embedded-compact-7-setup-public-ctp</link>
      <pubDate>Wed, 23 Jun 2010 11:55:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2010/06/23/windows-embedded-compact-7-setup-public-ctp/</guid>
      <description><![CDATA[It has been over a year since I joined the Windows Embedded Compact team. When I started I was...]]></description>
      <content:encoded><![CDATA[<p>It has been over a year since I joined the Windows Embedded Compact team. When I started I was assured I would have my work cut out for me. Customers had informed us that the current setup was, to be nice, out of date. After diving into the Windows CE 6.0 installation and QFE process, I realized that I was in for a lot of work.</p>
<p>During this time I worked closely with the <a target="_blank" href="https://wixtoolset.org/">Windows Installer XML (WiX) Toolset</a> Community to ensure that the installation I was to build would make it more than a couple of months out the door! I spoke with many of the members of the community and used some of the early forms of the <a target="_blank" href="https://robmensching.com/blog/posts/2009/7/14/Lets-talk-about-Burn">Burn</a> project to make it to this point. The architecture allowed us to create, what I affectionately call, the business layer to drive the <a target="_blank" href="https://robmensching.com/blog/posts/2009/7/14/Lets-talk-about-Burn">Burn</a> engine. </p>
<p>If you have installed or will install the new Windows Embedded Compact 7 Public CTP I am interested in knowing how your installation experience went!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/1581.windows_embedded_compact_7_setup_welcome_1D3A31E5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-26-19-metablogapi/1581.windows_5F00_embedded_5F00_compact_5F00_7_5F00_setup_5F00_welcome_5F00_1D3A31E5.png"><img height="387" width="553" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/26/19/metablogapi/2570.windows_embedded_compact_7_setup_welcome_thumb_7B02265E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-26-19-metablogapi/2570.windows_5F00_embedded_5F00_compact_5F00_7_5F00_setup_5F00_welcome_5F00_thumb_5F00_7B02265E.png" alt="windows_embedded_compact_7_setup_welcome" border="0" title="windows_embedded_compact_7_setup_welcome" style="display: inline; border: 0px;" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Embedded CE6 R3 Setup Experience</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/windows-embedded-ce6-r3-setup-experience</link>
      <pubDate>Tue, 06 Oct 2009 11:52:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/10/06/windows-embedded-ce6-r3-setup-experience/</guid>
      <description><![CDATA[Everyone in the Windows Embedded CE community, I would like to say hello from the Setup team! I have...]]></description>
      <content:encoded><![CDATA[<p>Everyone in the Windows Embedded CE community, I would like to say hello from the Setup team! I have recently joined the CE team and have been able to get my feet wet with the CE6 R3 release. It is my goal to help improve the developer&rsquo;s experience around the setup process. This is going to be even more important with the next full release of our product. After reading a few comments on <a target="_blank" href="https://blogs.msdn.com/mikehall/archive/2009/09/22/ce6-r3-released-to-manufacturing-includes-silverlight-for-windows-embedded.aspx">Mike Hall&rsquo;s</a> blog I noticed some people already having problems with Setup in one shape or another. I would like to get some general feedback for your current issues with the CE6 installation at this point.</p>
<h3>Help me help you!</h3>]]></content:encoded>
    </item>
    <item>
      <title>WiX Heat Extension: Setting Up a Custom Extension Project</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/wix-heat-extension-setting-up-a-custom-extension-project</link>
      <pubDate>Thu, 02 Jul 2009 11:52:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/07/02/wix-heat-extension-setting-up-a-custom-extension-project/</guid>
      <description><![CDATA[As most of you already know, the Windows Installer XML Toolset (WiX) is made to flexible. Most of...]]></description>
      <content:encoded><![CDATA[<P>As most of you already know, the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> is made to flexible. Most of the tools have the ability to be extended by using your own custom assembly. This is great when you have a custom action, specialized UI, preprocessor or anything else you might need in order to get your product out the door. There is documentation in the WiX help file on how to get going with other extensions but I noticed <a href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat</a> didn’t have anything of the sort. Here is my stab at getting all of you developers up and running. 
<H3>Architecture</H3>
<P>The first point to know about <a href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat</a> would be around the architecture. The entire engine is written to be extensible. The core, which contains one harvester, has its extension set during the command line switch parsing.</P><IMG alt="Heat Class Diagram" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/82/07/80/HeatCore.jpg" original-url="https://blogs.msdn.com/photos/icumove/images/9820780/original.aspx" mce_src="https://blogs.msdn.com/photos/icumove/images/9820780/original.aspx"> 
<P><a href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat</a> loads all the extensions from the heat.exe.config file and then parses the command line for additional extensions. Each extension is passed the command line switches that were given to <a href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat</a> so they can determine if they should become the active harvestor extension.</P><IMG alt="Extension Loading Order" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/82/07/85/ExtensionLoadOrder.jpg" original-url="https://blogs.msdn.com/photos/icumove/images/9820785/original.aspx"> 
<H3>Getting Started</H3>
<P>The examples I will be using are going to be via C#. Create your new extension project using the language of your choice. This should be a Class Library project. I have decided to use the .NET 2.0 Framework to keep in line with the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> and to keep from requiring a higher version of .NET on the machine (this is your choice however).</P><IMG alt="Create Your Project" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/82/07/74/CreateProject.jpg" original-url="https://blogs.msdn.com/photos/icumove/images/9820774/original.aspx" mce_src="https://blogs.msdn.com/photos/icumove/images/9820774/original.aspx"> 
<H3>Setting Up The Project</H3>
<P><IMG style="DISPLAY: inline; FLOAT: left" alt="Project Dependencies" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/82/07/88/ProjectDependency.jpg" original-url="https://blogs.msdn.com/photos/icumove/images/9820788/original.aspx" mce_src="https://blogs.msdn.com/photos/icumove/images/9820788/original.aspx">Now that you have created your project you will need to add a few dependencies. The main one is to the wix.dll which can be found in the same directory as <a href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat</a>.exe. If you are looking to write your own directory harvester you will want to add a reference to the WixUtilExtension.dll if you don’t want to rewrite all the work done to harvest an individual file. The FileHarvester has some great functionality around harvesting self-registering files.</P>
<P>Now that your project has its core dependencies added it is time to create a shell class that will become your harvester extension. For my example I will be calling my extension "MyCustomExtension".</P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 140px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>namespace MyHeatExtension
{
    using System;
    using System.Collections.Generic;

    using Microsoft.Tools.WindowsInstallerXml.Tools;

    public class MyCustomExtension : HeatExtension
    {
    }
}
</PRE></DIV>
<P>Next you will need to add a reference to your extension in the AssemblyInfo.cs file. This helps the extension loader to find out which class in your Assembly should be treated as your harvester.</P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 300px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

<DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline">using MyHeatExtension;</DIV>
using Microsoft.Tools.WindowsInstallerXml.Tools;

[assembly: AssemblyTitle("MyCustomExtension Heat Extension")]
[assembly: AssemblyDescription("This is an extension to heat.exe which is part of the WIX Toolset.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("MyCompany")]
[assembly: AssemblyProduct("MyHeatExtension")]
[assembly: AssemblyCopyright("Copyright © MyCompany 2009")]
[assembly: AssemblyCulture("en-us")]
[assembly: AssemblyVersion("0.5.0.0")]
[assembly: AssemblyFileVersion("0.5.0.0")]

[assembly: ComVisible(false)]

<DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline">[assembly: AssemblyDefaultHeatExtension(typeof(MyCustomExtension))]</DIV>
</PRE></DIV>
<H3>Overrides</H3>
<P>At this point I like to do a build on the project to make sure everything is working as expected. Once your compile has worked and your assembly built it is time to start coding. Going back to class diagram and looking at the HeatExtension class there are a couple exposed properties and methods. Two of these are pinnacle to our successful create of the extension; CommandLineTypes and ParseOptions.</P>
<P><B>CommandLineTypes</B> </P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 300px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>/// &lt;SUMMARY&gt;
/// Gets the supported command line types for this extension.
/// &lt;/SUMMARY&gt;
/// &lt;VALUE&gt;The supported command line types for this extension.&lt;/VALUE&gt;
public override HeatCommandLineOption[] CommandLineTypes
{
    get
    {
        return new HeatCommandLineOption[]
        {
            new HeatCommandLineOption("mydirext", "harvest a directory my way")
        };
    }
}
</PRE></DIV>
<P><B>ParseOptions</B> </P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 300px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>/// &lt;SUMMARY&gt;
/// Parse the command line options for this extension.
/// &lt;/SUMMARY&gt;
/// &lt;PARAM name="type"&gt;The active harvester type.&lt;/PARAM&gt;
/// &lt;PARAM name="args"&gt;The option arguments.&lt;/PARAM&gt;
public override void ParseOptions(string type, string[] args)
{
    bool activated = false;

    if (String.Equals(type, "mydirext", StringComparison.OrdinalIgnoreCase))
    {
        this.Core.Harvester.Extension = new MyHarvesterExtension();
        activated = true;
    }

    if (activated)
    {
        //TODO: Parse the command line if needed and add mutators if needed.
    }
}</PRE></DIV>
<H3>Summary</H3>
<P>You are now at the point to start diving in and looking into what it takes to actually make your HarvesterExtension and MutatorExtension if you need it. As my schedule allows I plan on adding other parts to this to help in the creation of a HarvesterExtension and MutatorExtension. I realize that much of this is undocumented so I hope that you find these blogs of use.</P>
<P><B>As always, comments and feedback welcome.</B></P>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/81/43/55/MyHeatExtension.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-81-43-55/MyHeatExtension.zip">MyHeatExtension.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Custom Action Using WiX: Reading From The Binary Table</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/custom-action-using-wix-reading-from-the-binary-table</link>
      <pubDate>Tue, 23 Jun 2009 08:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/06/23/custom-action-using-wix-reading-from-the-binary-table/</guid>
      <description><![CDATA[Over the years I have seen this question come up a few times. Although there are some good examples...]]></description>
      <content:encoded><![CDATA[<P>Over the years I have seen this question come up a few times. Although there are some good examples inside the source code of the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> itself, it can be hard to find. The question is “how do I read data from a MSI Binary table?” The easiest way I have found is to use the&nbsp;<a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> and some of the great libraries that ship with it. If you haven’t taken a look at them yet, start scanning the WcaUtil and DUtil libraries for some really great APIs that will make your life much less complex.</P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 300px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>const UINT COST_BINARY_READ_TRANSACTION = 10000;
//Extract the Binary Id to a memory stream as an immediate custom action.
//
__declspec(dllexport)
UINT __stdcall GetMyBinaryData(MSIHANDLE hInstall)
{
    HRESULT hr = S_OK;
    UINT er = ERROR_SUCCESS;
    LPWSTR pwzStreamToString = NULL;
    BYTE* pbData = NULL;
    DWORD cbData = 0;

    hr = WcaInitialize(hInstall, "GetMyBinaryData");
    ExitOnFailure(hr, "failed to initialize GetMyBinaryData");

    //Extact the Id in the Binary table to a stream.
    hr = <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">ExtractBinary</DIV>(L"MyBinaryTableId", &amp;pbData, &amp;cbData);
    ExitOnFailure(hr, "failed to extract binary data");

    //Write the stream to a string to be passed as CustomActionData
    hr = <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">WcaWriteStreamToCaData</DIV>(pbData, cbData, &amp;pwzStreamToString);
    ExitOnFailure(hr, "failed to write the stream to a string");

    hr = WcaDoDeferredAction(L"IAlwaysCodeForRollbackToHandleFailures", L"Rollback", 0);
    ExitOnFailure(hr, "Failed to schedule IAlwaysCodeForRollbackToHandleFailures");

    //Send it over to a deferred custom action if you need to do "special" things with it
    hr = <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">WcaDoDeferredAction(L"IAmUsingThisAsAMemoryStream", pwzStreamToString, COST_BINARY_READ_TRANSACTION)</DIV>;
    ExitOnFailure(hr, "Failed to schedule IAmUsingThisAsAMemoryStream");

LExit:
    ReleaseStr(pwzStreamToString);
    ReleaseMem(pbData);

    if (FAILED(hr))
    {
        er = ERROR_INSTALL_FAILURE;
    }
    return WcaFinalize(er); 
}</PRE></DIV>
<P>Next, as the custom action reads, we will be opening this in a deferred action as a memory stream.</P>
<DIV style="BORDER-BOTTOM: 5px solid; BORDER-LEFT: 5px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 300px; OVERFLOW: auto; BORDER-TOP: 5px solid; BORDER-RIGHT: 5px solid; PADDING-TOP: 5px"><PRE>//Read the stream from the CustomActionData property.
__declspec(dllexport)
UINT __stdcall <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">IAmUsingThisAsAMemoryStream</DIV>(MSIHANDLE hInstall)
{
    HRESULT hr = S_OK;
    UINT er = ERROR_SUCCESS;
    LPWSTR pwzCustomActionData = NULL;
    LPBYTE pbData = NULL;
    DWORD_PTR cbData = 0;

    hr = WcaInitialize(hInstall, "IAmUsingThisAsAMemoryStream");
    ExitOnFailure(hr, "failed to initialize IAmUsingThisAsAMemoryStream");

    hr = <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">WcaGetProperty</DIV>(L"CustomActionData", &amp;pwzCustomActionData);
    ExitOnFailure(hr, "failed to get CustomActionData");

    //Get the stream for the custom action data.
    hr = <DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000">WcaReadStreamFromCaData</DIV>(&amp;pwzCustomActionData, &amp;pbData, &amp;cbData);
    ExitOnFailure(hr, "failed to read file contents from custom action data");


LExit:
    ReleaseStr(pwzCustomActionData);
    ReleaseMem(pbData);

    if (FAILED(hr))
    {
        er = ERROR_INSTALL_FAILURE;
    }

    return WcaFinalize(er);
}</PRE></DIV>
<P>There is a quick and very dirty example on how to read from a Binary table. There are easy ways of abusing this which you, the developer, should avoid at all cost. Writing the streams to disk and leaving them there is one of the most common I have seen.</P>]]></content:encoded>
    </item>
    <item>
      <title>Right Corner: WiX Heat, Left Corner: Thousands of Files</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/right-corner-wix-heat-left-corner-thousands-of-files</link>
      <pubDate>Sun, 31 May 2009 07:30:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/05/31/right-corner-wix-heat-left-corner-thousands-of-files/</guid>
      <description><![CDATA[With the Windows Installer XML Toolset (WiX) v3.0 on the verge of hitting production more and more...]]></description>
      <content:encoded><![CDATA[<P>With the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> v3.0 on the verge of hitting production more and more people are starting to take a look at it and see what new, cool tools we have. One, of many, new ones is Heat.exe. This tool is the replacement (in many ways) to tallow.exe from the previous release. The tool had a complete rewrite and is able to offer some great new functionality.</P>
<P>As with every new tool, once someone gets a hold of it they want it to do more. In the case I don’t disagree with them.</P>
<UL>
<LI>Was Heat designed to help automate the creation of WiX source? Yes. 
<LI>Was the intention to have Heat gather thousands of files quickly for Setup authors? Yes. 
<LI>Is Heat ready to be placed into an automated build system and generate patch compliant MSI packages? No.</LI></UL>
<P>This is where I am seeing the initial pain points. Setup authors that have installations with 1,000+ files don’t want to be hand coding or manipulating the output in order to fit their needs. I, being one of those authors (200,000+ files currently), completely agree. This is why, as the current feature owner, it pains me to say that Heat is not ready for this type of primetime work straight out of the box.</P>
<P>There are solutions, however, that can help us large setup authors out. Before I go into details on that, take a read over a response I made to someone that asked a few of these questions.</P>
<DIV style="BORDER-BOTTOM: #333366 0.2em solid; BORDER-LEFT: #333366 0.2em solid; PADDING-BOTTOM: 20px; BACKGROUND-COLOR: #e1f3ff; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; BORDER-TOP: #333366 0.2em solid; BORDER-RIGHT: #333366 0.2em solid; PADDING-TOP: 20px">
<P>Hey Nick, 
<P>I understand your frustration, in fact have expressed them myself. Bottom line is no, Heat currently isn't setup to handle this volume of files in a fully Windows Installer compliant way. This is a known design limitation for the v3.0 release. However, I wouldn't throw the tool away. The general issue around large installations is not just getting the files onto the machine but then servicing the installation "in-place". This would mean not doing a full uninstall and reinstall for each new release. In order to handle this functionality many things need to stay the same for Windows Installer to correctly build patches for an MSI. Component key files must say the same and pretty much cannot be deleted, Feature/Component/File Ids must say the same, Component GUIDs must stay the same according to their key, DiskId's must say the same and I might be missing one or two things from that. 
<P>&gt; Is Heat not designed to reduce the task of including 3000 files to adding a &lt;ComponentGroupRef&gt; (or whatever) line to a "Feature" ? 
<P>Yes and no. What you are seeing with the 1600 components in Candle/Light is actually thrown in Heat as well as a warning. It is very possible this should be upgraded to an error but I thought that was too strong. It is really up to the developer to decide that risk. However, with over 20,000 files one would probably not even see the warning. There are some ways to work around this if you are able to break up your directly harvesting into blocks of less than 1600 files. 
<P>&gt; Why does the Heat output have one (blank, and duplicated) DirectoryRef each time there is a component in the one directory?&nbsp; Wouldn't this degrade performance... 
<P>These actually aren't blank, they are correctly fragmented. You can use an "-sfrag" command line switch to get rid of this functionality. This has been done to allow components to be pulled into other ComponentGroups/Features without taking all other Directory references. This is in line with with how WiX can be authored for flexibility 
<P>&gt; Is there a way to tell Heat that the path to the files is ..\Whatever, NOT a variable, NOT the silly string it uses by default? 
<P>The answer is no. The use of SourceDir\ was decided to remove root directory path dependencies. This is especially useful in large build environments where the *.wxs files can be copied between machines. The use of the "-b" command line switch in Light allows for root directories to be substituted in place of the SourceDir. It also allows Heat to generate the Directory/Component/File Ids in a repeatable manner to help enable patching. 
<P>The technical challenges for all of this are actually not extremely difficult. However, they aren't easy either. Much thought has been done in the WiX v3.0 timeline in order to being addressing many of these issues and make this high level of generation possible. Using Extensions to Heat there are ways to do this correctly. I am currently working on doing this for a product that is deploying over 200,000 files which we would like to perform "in-place" patching on once released. I am currently using an internal prototype to deliver this functionality and hope to be able to get this extension onto the WixContrib site within the next few months. Again, automating the initial gathering of files is not the challenge. It is the doing it again for the patch that will come out after your RTM.</P></DIV>
<P>What can be done to enable this type of requirement? 
<UL>
<LI>Layout Your Build Output into Groups of Less Than 1600 Files</LI>
<UL>
<LI>I am aware that many people will not find this to be a viable options, but it would work.</LI>
<LI>Heat could be run against these smaller grouped directories and easily handle your needs.</LI>
<LI>This would also enable auditing of the files your company is releasing out the door.</LI>
<UL>
<LI>Why does this matter? In one company I worked for a developer on his way out of the company got upset and wanted to deface a public website with an addition of a new GIF (a <A href="https://en.wikipedia.org/wiki/Marijuana" target=_blank mce_href="https://en.wikipedia.org/wiki/Marijuana">Cannabis</A> leaf). The file was named “pot.gif” but that isn’t enough to throw off any major alarms. However, because we had put in change control on what files were allowed to ship we found this through auditing.</LI></UL></UL>
<LI>Write a Custom Heat Extension</LI>
<UL>
<LI>Heat, like the other tools in <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a>, can be extended.</LI>
<LI>Writing your own Heat extension can be challenging for some but easy for others. If you are up to the task then this could be your quickest solution.</LI>
<LI>If you take this approach, be sure to follow Component rules and all the other fun stuff that is required to remain stable.</LI></UL>
<LI>Wait Until Someone Else Does the Above Mentioned Possibility</LI>
<UL>
<LI>This could be the simplest but not the most quickly available.</LI>
<LI>If your company isn’t into letting you write your own code, this would be your option.</LI></UL>
<LI>Wait Until WiX vNext</LI>
<UL>
<LI>The least optimal solution would be to wait until the next release of Heat.</LI>
<LI>Rob and I have tossed around some ideas on how to improve Heat overall in order to make it a production ready build environment tool.</LI>
<LI>When will this happen? It will be a while &lt;grin/&gt;</LI></UL></UL>
<P>Some good news with all of this. For my day job, I am looking into doing much of this in order to get our products out the door and patchable. I would say the contribution to <A href="https://www.codeplex.com/wixcontrib" target=_blank mce_href="https://www.codeplex.com/wixcontrib">WixContrib</A> will be several months off until something is ready, but it IS coming. 
<P>Some references: 
<UL>
<LI><A href="https://www.joyofsetup.com/2008/12/30/paying-for-upgrades/" mce_href="https://www.joyofsetup.com/2008/12/30/paying-for-upgrades/">https://www.joyofsetup.com/2008/12/30/paying-for-upgrades/</A> 
<LI><A href="https://blogs.msdn.com/heaths/archive/2005/09/12/464047.aspx" target=_blank mce_href="https://blogs.msdn.com/heaths/archive/2005/09/12/464047.aspx">https://blogs.msdn.com/heaths/archive/2005/09/12/464047.aspx</A> 
<LI><A href="https://blogs.msdn.com/pmarcu/archive/2009/05/19/wix-removing-files-with-patches.aspx" mce_href="https://blogs.msdn.com/pmarcu/archive/2009/05/19/wix-removing-files-with-patches.aspx">https://blogs.msdn.com/pmarcu/archive/2009/05/19/wix-removing-files-with-patches.aspx</A></LI></LI></LI></UL>]]></content:encoded>
    </item>
    <item>
      <title>WIX Heat Wave Brings Changes</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/wix-heat-wave-brings-changes</link>
      <pubDate>Thu, 05 Mar 2009 22:30:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/03/05/wix-heat-wave-brings-changes/</guid>
      <description><![CDATA[There has been some recent work to Heat.exe, within the Windows Installer XML Toolset (WiX), which I...]]></description>
      <content:encoded><![CDATA[<P>There has been some recent work to <A title="Harvester (Heat)" href="https://wix.sourceforge.net/manual-wix3/heat.htm" target=_blank mce_href="https://wix.sourceforge.net/manual-wix3/heat.htm">Heat.exe</A>, within the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a>, which I think will have a significant impact on how people use the application currently and how it will be used in the feature. The features are brought forth from a great deal of user feedback and a general need for some “tender, loving care.” People have been using Heat to harvest various data stores and including the auto-generated <A title="WiX Source File" href="https://wix.sourceforge.net/manual-wix3/files.htm" target=_blank mce_href="https://wix.sourceforge.net/manual-wix3/files.htm">.wxs</A> files as part of their projects. This has been a good “start” for many projects but the intent was not to use it for constant re-generation in a build environment for dynamic content. 
<P>Although this practice is still recommend against, this last update is a set in the direction of consistent regeneration. In Windows Installer this is a very difficult task to manage as there are many rules that a package must confirm to in order to be patch compliant. Not only must Component GUIDs remain stable, the File ID, Registry ID, Directory ID Media Number and other items must stay consistent. If this does not happen there can be serious implications to the “in-place” servicing of your product. 
<P>Several years ago I was working on a way to do what heat.exe is starting to do now, auto-generate dynamic content in a compliant way. My project, <A title=WIXML href="https://www.codeplex.com/WIXML" target=_blank mce_href="https://www.codeplex.com/WIXML">WIXML</A>, failed to generate MSIs that were upgrade compliant. It was necessary to do a full uninstall with each new package because it broke all the rules that I mentioned above (additional information from Bob Arnson “<A href="https://www.joyofsetup.com/2008/12/30/paying-for-upgrades/" target=_blank mce_href="https://www.joyofsetup.com/2008/12/30/paying-for-upgrades/">Paying for Upgrades</A>”). With the latest update, Heat is getting <STRONG>closer</STRONG> to the ability of being compliant with consistent re-generation. 
<P>There has been four significant command line switches added that will help users comply to the rules above. 
<P>-cg &lt;GroupName&gt;<BR>-dr &lt;DirectoryRefId&gt;<BR>-srd<BR>-var 
<P>The –cg &lt;GroupName&gt; command instructs Heat to harvest a given directory and include all found components in a &lt;<A href="https://wix.sourceforge.net/manual-wix3/wix_xsd_componentgroup.htm" target=_blank mce_href="https://wix.sourceforge.net/manual-wix3/wix_xsd_componentgroup.htm">ComponentGroup</A>/&gt; with the given name. This will ensure that, when authoring a full product, a developer can be guaranteed a static value to reference using a &lt;<A href="https://wix.sourceforge.net/manual-wix3/wix_xsd_componentgroupref.htm" target=_blank mce_href="https://wix.sourceforge.net/manual-wix3/wix_xsd_componentgroupref.htm">CompnentGroupRef</A>/&gt;. </P>
<DIV style="WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 175px; COLOR: #000000; OVERFLOW: auto"><PRE>heat.exe dir C:\MyDir -srd -cg <DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">TestMe</DIV><BR><BR>
&lt;Wix xmlns="https://schemas.microsoft.com/wix/2006/wi"&gt;
  &lt;Fragment&gt;
    &lt;ComponentGroup Id="<DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">TestMe</DIV>"&gt;
      &lt;Component Id="CO_BEA0A254206A075FE419AECC8F8323C3" Directory="DI_5E971BF1ECC0BC11795785D90F250FC0" ... &gt;
        &lt;File Id="FI_4273BB2732377498E74980308130C808" ... /&gt;
      &lt;/Component&gt;
</PRE></DIV><BR><BR>
<DIV>The -dr switch takes a value of a <A href="https://wix.sourceforge.net/manual-wix3/wix_xsd_directoryref.htm" target=_blank mce_href="https://wix.sourceforge.net/manual-wix3/wix_xsd_directoryref.htm">DirectoryRef</A>/@Id. This will become the directory which all other directories are rooted under. 
<DIV style="BACKGROUND-COLOR: lightgreen; DISPLAY: inline; COLOR: #000000">In addition, and important to note, this acts as the seed for all the identifier generation.</DIV>Changing this value will directly impact the values of ALL the identifiers. When this value is not specified, it will default to "TARGETDIR".</DIV><BR>
<DIV style="WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 175px; COLOR: #000000; OVERFLOW: auto"><PRE>heat.exe dir C:\MyDir -srd -dr <DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">MyDir</DIV><BR><BR>
&lt;Wix xmlns="https://schemas.microsoft.com/wix/2006/wi"&gt;
  &lt;DirectoryRef Id="<DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">MyDir</DIV>"&gt;
    &lt;Component Id="CO_BEA0A254206A075FE419AECC8F8323C3" Directory="DI_5E971BF1ECC0BC11795785D90F250FC0" ... &gt;
      &lt;File Id="FI_4273BB2732377498E74980308130C808" ... /&gt;
    &lt;/Component&gt;
</PRE></DIV><BR>
<DIV>The -srd switch suppresses the including the root directory of the path given. Using this switch will also change the values of identifiers being generated because of how they will be rooted. 
<DIV style="BACKGROUND-COLOR: lightgreen; DISPLAY: inline; COLOR: #000000">Change this switch with high caution and review on the impact to your product.</DIV></DIV><BR>
<DIV style="WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 410px; COLOR: #000000; OVERFLOW: auto"><PRE>heat.exe dir C:\MyDir -sfrag<BR><BR>
&lt;Wix xmlns="https://schemas.microsoft.com/wix/2006/wi"&gt;
  &lt;Fragment&gt;
    &lt;DirectoryRef Id="TARGETDIR"&gt;
      <DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">&lt;Directory Id="dir86787CC870C17D6ABA6D1CDCBD925324" Name="MyDir"&gt;</DIV>
        &lt;Directory Id="dirAA5EBADF0D0CC654BAD8E2CEFBF96609" Name="one"&gt;
          &lt;Component Id="cmp51B22E187A7403EF3A8EB589174E89DC" ...&gt;
            &lt;File Id="filEA449989D4339EB8C7329B93F83D35FE" ... /&gt;
          &lt;/Component&gt;
        &lt;/Directory&gt;

heat.exe dir C:\MyDir <DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">-srd</DIV> -sfrag<BR><BR>
&lt;Wix xmlns="https://schemas.microsoft.com/wix/2006/wi"&gt;
  &lt;Fragment&gt;
    &lt;DirectoryRef Id="TARGETDIR"&gt;
      &lt;Directory Id="dir090ACB8E8D9B8C1F26DE6E8300AA9049" Name="one"&gt;
        &lt;Component Id="cmpE21824A6879A478E4A884BA6B00C33C9" ...&gt;
          &lt;File Id="filF1BA1271365EB2A130AA3F0BE83E9D6D" ... /&gt;
        &lt;/Component&gt;
    &lt;/Directory&gt;
</PRE></DIV><BR><BR>
<DIV>The -var switch value of the preprocessor variable you want to use "$(&lt;var|env&gt;.MyVar)". Renaming this value will not impact dynamically created identifiers.</DIV><BR>
<DIV style="WHITE-SPACE: nowrap; BACKGROUND: lightblue; HEIGHT: 200px; COLOR: #000000; OVERFLOW: auto"><PRE>heat.exe dir C:\MyDir -srd -sfrag -var <DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">var.MyVar</DIV><BR><BR>
&lt;Wix xmlns="https://schemas.microsoft.com/wix/2006/wi"&gt;
&lt;Fragment&gt;
  &lt;DirectoryRef Id="TARGETDIR"&gt;
    &lt;Directory Id="dir090ACB8E8D9B8C1F26DE6E8300AA9049" Name="one"&gt;
      &lt;Component Id="cmpE21824A6879A478E4A884BA6B00C33C9" ...&gt;
        &lt;File Id="filF1BA1271365EB2A130AA3F0BE83E9D6D" Source="$(<DIV style="BACKGROUND-COLOR: yellow; DISPLAY: inline; FONT-WEIGHT: bold">var.MyVar</DIV>)\one\test.txt" ... /&gt;
      &lt;/Component&gt;
    &lt;/Directory&gt;
</PRE></DIV><BR>
<DIV>As always, feedback is appreciated! I hope these changes help some people onboard!</DIV>]]></content:encoded>
    </item>
    <item>
      <title>WIX Now Runs on FIPS Enable Machines</title>
      <link>https://docs.microsoft.com/archive/blogs/icumove/wix-now-runs-on-fips-enable-machines</link>
      <pubDate>Fri, 06 Feb 2009 05:23:00 GMT</pubDate>
      <dc:creator><![CDATA[Brian Rogers (4252)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/icumove/2009/02/06/wix-now-runs-on-fips-enable-machines/</guid>
      <description><![CDATA[As mentioned in my previous blog, there was a user request to enable the Windows Installer XML...]]></description>
      <content:encoded><![CDATA[<DIV>
<P>As mentioned in my previous blog, there was a user request to enable the <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> to run on <A href="https://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html" target=_blank mce_href="https://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html">FIPS enabled</A> machines. This in itself was not a large change. In order to enable it all that needed to be done was to switch the hashing algorithms that we use from a non-compliant one (<A href="https://en.wikipedia.org/wiki/Md5" target=_blank mce_href="https://en.wikipedia.org/wiki/Md5">MD5</A>) to a compliant one (<A href="https://en.wikipedia.org/wiki/SHA_hash_functions" target=_blank mce_href="https://en.wikipedia.org/wiki/SHA_hash_functions">SHA1</A>). The issue came when not wanting to break backwards compatibility with users that have auto generated identifiers now and are using the generated short name feature as well. Second was to ensure that merge modules built with&nbsp;<a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> and that are embedded in an MSI built with <a href="https://wix.sf.net">Windows Installer XML Toolset (WiX)</a> do not break (overflow Id length) with FIPS enabled. 
<DIV style="DISPLAY: block">This introduces a new command line switch on candle.exe. The argument “-fips” can now be specified in order to switch the hashing algorithms to SHA1. If you are running on a FIPS enabled machine and you do not specify this switch you will now receive an exception clearly telling you that you need to enable this feature. Once this is enabled, it will break the upgrade rules for registry Ids that are auto generated and it will change the values generated for short names; 
<DIV style="BACKGROUND-COLOR: #ffff00; DISPLAY: inline; COLOR: #000000; VERTICAL-ALIGN: top">so please be careful!</DIV></DIV>
<P>Below is what you can expect to see in terms of the output changing. <PRE>Registry Id Change
regCF3E4DD8E9FDD1355D6E8ECA2D7DA852
to
regFD39D952EC8973D41843396A15B57055

Short Name Change
djjnosd-.wxs
to
q9_iaha-.wxs
</PRE>
<P>In addition the two static methods in src\wix\CompilerCore.cs have changed to members of that class. Please take note of this if you are using those!</P></DIV>]]></content:encoded>
    </item>
  </channel>
</rss>