<?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>Gremlin In The Machine</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/gremlininthemachine/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:21:59 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Detecting which Windows Optional Components are installed in a machine</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/detecting-which-windows-optional-components-are-installed-in-a-machine</link>
      <pubDate>Wed, 28 Apr 2010 17:29:51 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2010/04/28/detecting-which-windows-optional-components-are-installed-in-a-machine/</guid>
      <description><![CDATA[I have been experimenting with programmatic detection of Windows Optional Components installed with...]]></description>
      <content:encoded><![CDATA[<p>I have been experimenting with programmatic detection of Windows Optional Components installed with Component Based Servicing(available in Windows Vista/2008 and Windows 7/2008R2).</p>  <p>This is similar to using the wizards in the Roles and Features applets of Server Manager, but doing it from a script or executable program.</p>  <p>Installing optional components is easy. OCSetup is included in the operating system and all you need to do is give it a package name</p>  <p>Detecting components was surprisingly less straightforward. Windows Server Core includes OCList.exe that will output a tree view of all components (very useful for viewing dependencies among components) and list their installed state. This is pretty close to what I needed but it had 2 small problems: </p>  <ul>   <li>OCList is currently unavailable on the non-core versions of Windows Server (it can be copied from a Server Core installation, but I prefer avoiding this kind of external dependency) </li>    <li>I would have to parse the output from OCList (which I didn’t like either because it can break too easily after an OS upgrade) </li> </ul>  <p>I had a quick look at the OCList sources (to see if I could use the same techniques) but it was full of currently undocumented APIs (e.g., using the ICbsPackage interface). For legal reasons if I wanted to call these APIs from my code I would have to wait until they are publicly documented, which I didn’t want to do.</p>  <p>My lead suggested looking in WMI and after some digging I finally found the Win32_OptionalFeature WMI class that provides the info that I need and it can be scripted or accessed programmatically.</p>  <p>For example, listing the currently installed optional components can be done in PowerShell with:</p> <code>   <p>foreach ($feature in Get-WmiObject -Class Win32_OptionalFeature -Namespace root\CIMV2 -Filter &quot;InstallState = 1&quot;) {$feature.Name}</p> </code>  <p>Listing the components that are available and not yet installed can be done by comparing the InstallState to 2 (instead of 1)</p>  <p>Querying the state of specific components is also easy. For example, finding out if .Net 3.0 is installed would be:</p> <code>   <p>(Get-WmiObject -Class Win32_OptionalFeature -Namespace root\CIMV2 -Filter &quot;Name = 'NetFx3'&quot;).InstallState</p> </code>  <p>and the possible results are:</p>  <ul>   <li>Null = Not available (or wrong name) </li>    <li>1 = Installed </li>    <li>2 = Available but not installed </li> </ul>  <p>The reference for WQL (WMI Query Language) is <a title="MSDN WQL Reference" href="https://msdn.microsoft.com/en-us/library/aa394606(v=VS.85).aspx" target="_blank">here</a>. </p>  <p>If you need to write managed code or native code to do this type of WMI queries, my recommendation is to experiment with PowerShell first and then implement it in your target language once you have found the best queries.</p>]]></content:encoded>
    </item>
    <item>
      <title>Upside down writing with Unicode</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/upside-down-writing-with-unicode</link>
      <pubDate>Fri, 12 Mar 2010 22:23:13 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2010/03/12/upside-down-writing-with-unicode/</guid>
      <description><![CDATA[Last week I was visiting a forum when I came across something strange: an upside down word.   The...]]></description>
      <content:encoded><![CDATA[<p>Last week I was visiting a forum when I came across something strange: an upside down word. </p>  <p>The first thought that came to my mind is “my machine is infected”. Back in the day when I was still at the University, there were viruses that would play tricks with your text: flipping it upside down, making your sentences “rain down” (random letters start scrolling down until they disappear), showing a little ball bouncing and erasing text as it passed over it, all sort of tricks that the virus authors considered funny (of course it was rarely funny for the victim, as it typically implied losing several hours worth of work, on the other hand it was more innocent than today’s malware).</p>  <p>Then I looked more carefully. It was not a virus, I could select the text and paste it into notepad. Hmm, interesting. I started charmap.exe and looked for upside down letters. Sure enough there they were, letters like U+0279 Latin small letter turned r. Not all letters have turned versions but I did find enough, or I just found letters that looked sufficiently close to the reversed letter that I needed, even though semantically they were something else. For example U+0131, the small dotless latin i is a good choice for a turned i (incidentally, this is a letter that can create very interesting security bugs that are locale-dependent, but that is a story for some other time).</p>  <p>The next day I indulged myself in silly fun sending emails to my friends, <font size="3" face="Arial Unicode MS">uıʌəʞ</font> and <font size="3" face="Arial Unicode MS">ןəɯɐʞ</font>, signed as <font size="3" face="Arial Unicode MS">oıqəsnə</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Silent for a while</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/silent-for-a-while</link>
      <pubDate>Tue, 09 Mar 2010 18:19:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2010/03/09/silent-for-a-while/</guid>
      <description><![CDATA[Releases and development cycles have been keeping me silent for a while but I have written a couple...]]></description>
      <content:encoded><![CDATA[<p>Releases and development cycles have been keeping me silent for a while but I have written a couple of articles in our <a title="Microsoft Forefront Server Protection Blog" href="https://blogs.technet.com/fss/" target="_blank">team blog</a>:</p>  <p><a title="11 Languages MUI out of the box" href="https://blogs.technet.com/fss/archive/2009/11/20/11-languages-mui-out-of-the-box.aspx" target="_blank">11 Languages MUI out of the box</a></p>  <p><a title="Forefront Protection 2010 for Exchange Server 14 and RBAC" href="https://blogs.technet.com/fss/archive/2010/02/24/forefront-protection-2010-for-exchange-server-14-and-rbac.aspx" target="_blank">Forefront Protection 2010 for Exchange Server 14 and RBAC</a></p>  <p>These articles summarize the end result, but the process for getting to the corresponding design is full of options and passionate discussions. I am very curious about your reactions to these features. After reading about the features and getting a little more insight about them, do you feel we made the right choices? Is it important that all these scenarios get consideration and we dedicate the necessary time and effort? Do you think that we are just wasting our time in fine points that don’t really make a difference? Would you have preferred a different solution? I will be very glad to hear your opinions (yes, even if some of them imply that I was mistaken).</p>  <h6>Disclaimer: Your opinions and ideas are always welcome but please do not forget that the <a title="Microsoft - Information on Terms of Use" href="https://www.microsoft.com/About/Legal/EN/US/IntellectualProperty/Copyright/default.aspx" target="_blank">terms of service</a> do apply.</h6>]]></content:encoded>
    </item>
    <item>
      <title>Katakana English</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/katakana-english</link>
      <pubDate>Mon, 18 Dec 2006 18:32:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/12/18/katakana-english/</guid>
      <description><![CDATA[Today I&nbsp;presented a brief training session on reading Japanese Katakana, using actual...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: georgia; mso-outline-level: 1">Today I&nbsp;presented a brief training session on reading Japanese Katakana, using actual screenshots and logs from the Japanese version of our product. For certain cases, a significant percentage of the text&nbsp;in the product and logs can be understood just by using the table&nbsp;from <A class="" title="Wikipedia entry - Katakana" href="https://en.wikipedia.org/wiki/katakana" mce_href="https://en.wikipedia.org/wiki/katakana">this page</A> (and a little bit of imagination). A few people did really well and when I asked them afterwards they said they had never tried to learn Japanese before. It was amazing.</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: georgia; mso-outline-level: 1" mce_keep="true">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: georgia; mso-outline-level: 1">For the pronunciation, I brought a japanese spelling toy (oshaberi machine). I'm not a native Japanese speaker and even though my accent is ok, I wanted to&nbsp;show accurate pronunciation,&nbsp;accent-free. My 2-year old daughter was protesting this morning when she saw me&nbsp;taking it&nbsp;:(</P>]]></content:encoded>
    </item>
    <item>
      <title>MSI, WiX and Unicode</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/msi-wix-and-unicode</link>
      <pubDate>Tue, 05 Dec 2006 22:29:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/12/05/msi-wix-and-unicode/</guid>
      <description><![CDATA[World-readiness in a product&nbsp;tends to be&nbsp;much easier to handle&nbsp;using Unicode than it...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><A class="" title="Get World-Ready page in the Globaldev Portal" href="https://www.microsoft.com/globaldev/getwr/" target=_blank mce_href="https://www.microsoft.com/globaldev/getwr/"><FONT face=georgia,palatino>World-readiness</FONT></A><FONT face=georgia,palatino> in a product&nbsp;tends to be&nbsp;much easier to handle&nbsp;using Unicode than it is with ANSI/OEM&nbsp;codepages. </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>WiX (and MSI) require specifying a codepage for the project. I tried using codepage 1200 (UTF-16 LE) in my project and WiX produced error LGHT0040: Codepage "1200" is not a valid codepage. </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>After some digging, I found </FONT><A class="" title="Heath Stewart's blog entry &quot;MSI Databases and Code Pages&quot;" href="https://blogs.msdn.com/heaths/archive/2005/10/05/477577.aspx" target=_blank mce_href="https://blogs.msdn.com/heaths/archive/2005/10/05/477577.aspx"><FONT face=georgia,palatino>this</FONT></A><FONT face=georgia,palatino> information indicating that Unicode support in MSI is "unofficial" and seems to&nbsp;include only&nbsp;UTF-8 (65001)&nbsp;and UTF-7 (65000). I wonder why 1200, 1201, 12000 and 12001 are not in the list.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>Anyway, 65001 is a nice number. It reminds me of the CPU where I learnt assembly programming :)</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Installing Vista RTM and troubleshooting multiple-monitor issues</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/installing-vista-rtm-and-troubleshooting-multiple-monitor-issues</link>
      <pubDate>Mon, 04 Dec 2006 19:24:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/12/04/installing-vista-rtm-and-troubleshooting-multiple-monitor-issues/</guid>
      <description><![CDATA[Today I spent my time&nbsp;between meetings and setting up&nbsp;a&nbsp;machine to run 64-bit Vista...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>Today I spent my time&nbsp;between meetings and setting up&nbsp;a&nbsp;machine to run 64-bit Vista (which should become my main development machine once I get everything installed).</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=Georgia></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>Installation&nbsp;began very&nbsp;smoothly. I didn't want to bother burning a DVD so I copied the files locally (to the 2nd hard drive), booted from a <A class="" title="Information on Windows Preinstallation Environment" href="https://technet.microsoft.com/en-us/windowsvista/aa905120.aspx" target=_blank mce_href="https://technet.microsoft.com/en-us/windowsvista/aa905120.aspx">Windows PE</A>&nbsp;CD, ran the installation program, selected to format the hard drive (I was running a 32-bit version of the OS previously so I had to do a clean install anyway) and let the installation proceed. </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>It finished copying, uncompressing, doing some configuration,&nbsp;rebooted, the startup screen came up and then... nothing! The screen was blank (actually the monitor went into power saving mode). In the past, I have had good success with the usual setup recovery (power off, power on and let setup detect what went wrong and then continue), but&nbsp;I tried it a couple of times and it didn't help this time.&nbsp;Safe mode&nbsp;wasn't useful&nbsp;either (I could get to a screen but I couldn't do anything because setup hadn't completed). It&nbsp;looked like a video driver problem, somehow the rest of the installation seemed fine but it just couldn't output to the monitor. I contacted helpdesk to see if there was a known issue but no luck.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>Thinking about what could be confusing to the video driver, I decided to unplug the second monitor. I rebooted and that was it! The welcome screen came up normally, I could configure&nbsp;a user account, log in, plug back in the second monitor, configure it and everything was fine.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>I know that we are lucky to run multiple monitors&nbsp;and it is not a configuration that&nbsp;majority of users will have however, if you're having installation problems and </FONT><FONT face=georgia,palatino>have a multi-monitor setup, try unplugging one of them, it may help you get past the problem. </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>I&nbsp;felt&nbsp;that this problem&nbsp;is a good example of&nbsp;a&nbsp;classic chicken-and-egg problem with setup programs: at install time some configuration&nbsp;items&nbsp;are not yet ready and&nbsp;related features cannot work as expected. In this case the driver was probably trying to&nbsp;determine which output was primary and which one was secondary but it often happens with other seemingly simple things. All those&nbsp;support libraries and frameworks&nbsp;that&nbsp;are extensively used at program runtime&nbsp;are not that simple to use from setup routines, because at the beginning&nbsp;they have&nbsp;not been configured yet.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><FONT face=georgia,palatino>Regardless of this issue with multi-monitor setups, I have thought for a long time&nbsp;that the Windows Setup was&nbsp;an impressive piece of engineering. I'm not just referring to the software but also to&nbsp;all the work "behind the scenes" with the hardware vendors. It is not easy to succeed&nbsp;in detecting and configuring all&nbsp;the huge variety&nbsp;of hardware as it does.&nbsp;The Vista installer may&nbsp;seem deceptively simple to many people but&nbsp;system-level software that is&nbsp;"invisible"&nbsp;(as in&nbsp;"it just works")&nbsp;can actually be&nbsp;a sign of excellence :)</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>WiX project structure</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/wix-project-structure</link>
      <pubDate>Thu, 30 Nov 2006 15:50:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/11/30/wix-project-structure/</guid>
      <description><![CDATA[&nbsp;A project needs some structure to its files. After looking at some example projects, I decided...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"><FONT face=georgia,palatino>&nbsp;A project needs some structure to its files. After looking at some example projects, I decided for now to use&nbsp;a "main" project file that in turn includes a file for each table being generated, like this: </P></FONT>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;?xml version="1.0" encoding="utf-8"?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;Wix xmlns="https://schemas.microsoft.com/wix/2003/01/wi"&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;Product </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino><EM><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>…(attributes)...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;Package </FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face=georgia,palatino><EM>…(attributes)...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">/&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;?include Media.wxs&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;?include Property.wxs?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;?include Directory.wxs?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;/Product&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;/Wix&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>Directory.wxs is going to be too big if I put everything in a single file so in turn I will use one file that nests the others, with a structure like this:</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;?xml version="1.0" encoding="utf-8"?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;Include xmlns="https://schemas.microsoft.com/wix/2003/01/wi"&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;!--Root of Directory/Component/File Table--&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;!--This file only contains the entries for the root folders--&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;!--The actual contents of each folder are ?include?d --&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;Directory</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face=georgia,palatino><EM>…(attributes)...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;Directory</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face=georgia,palatino><EM>…(attributes)...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;?include Dir1.wxs?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;/Directory&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;Directory</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face=georgia,palatino><EM>…(attributes)...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;?include Dir2.wxs?&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face="courier new,courier">&lt;/Directory&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"><FONT face=georgia,palatino><EM>...</EM></FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;/Directory&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face="courier new,courier">&lt;/Include&gt;</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>Each ?include?d Directory would corresponds to a root folder in the "old" Installscript-based project.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>If I were writing C/C++ I would certainly not create a file that #includes every&nbsp;file in the project.&nbsp;I'm probably overusing ?include? and I should look into producing&nbsp;separate object files&nbsp;instead, but I'll leave that for another day.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=Georgia></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=Georgia>On other news,&nbsp;our product was&nbsp;part of today's <A class="" title="Ready for a New Day" href="https://www.microsoft.com/business/launch2007/default.mspx&amp;&amp;HL=Business+launch+highlights+for+Windows+Vista%2c+2007+Microsoft+Office+system%2c+and+Exchange+Server+2007" mce_href="https://www.microsoft.com/business/launch2007/default.mspx&amp;&amp;HL=Business+launch+highlights+for+Windows+Vista%2c+2007+Microsoft+Office+system%2c+and+Exchange+Server+2007">Ready for a New Day</A> announcement. Yeah!</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Choosing which WiX</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/choosing-which-wix</link>
      <pubDate>Wed, 29 Nov 2006 19:49:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/11/29/choosing-which-wix/</guid>
      <description><![CDATA[WiX seems to have a very good balance between "churn" and "release often" (thank you for the...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>WiX seems to have a very good balance between "churn" and "release often" (thank you for the replies&nbsp;to my previous post). The releases in Sourceforge are spaced apart a couple of months and activity is brisk but not furious (browsing the changelists doesn't consume an excessive amount of time). It looks like I didn't need to worry&nbsp;that much about churn and I can go for the nice features in 3.0. The latest release at SourceForge is 3.0.02211 and it is also what Dave (the other setup developer in&nbsp;my team) already had downloaded. I browsed through the change lists for check-ins after the latest release and didn't see a "must have". Going with 3.0.02211 and updating when we see a needed fix or feature&nbsp;looks like&nbsp;a reasonable approach.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=Georgia></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>Thinking about why I was concerned with churn, my&nbsp;favorite Open Source project used to be <A class="" title="Debian project" href="https://www.debian.org/" mce_href="https://www.debian.org/">Debian</A> and I used to run the unstable version. It was a lot of fun to play with and&nbsp;my interest&nbsp;on&nbsp;the issues&nbsp;related to&nbsp;installer packages owes much to them <A class="" title="Search on my name + Debian" href="https://search.live.com/results.aspx?q=Eusebio+Rufian-Zilbermann+Debian" mce_href="https://search.live.com/results.aspx?q=Eusebio+Rufian-Zilbermann+Debian">':)</A> however, it did change very, very often and is not something I'd&nbsp;suggest for production. The stable version was meant for that but then the updates were too slow for my liking. In fairness, I've read that they have improved in the past few years but I haven't used it for a while.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>I am&nbsp;now creating a "staging" area, a local folder that mirrors the folder structure as it will be installed on the target machine. It is not strictly necessary but I find it makes it easier to troubleshoot&nbsp;certain problems. We use </FONT><A class="" title="Binplace syntax (MSDN)" href="https://msdn2.microsoft.com/en-gb/library/ms791466.aspx" mce_href="https://msdn2.microsoft.com/en-gb/library/ms791466.aspx"><FONT face=georgia,palatino>Binplace</FONT></A><FONT face=georgia,palatino> for generating symbols, and<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>the "class" in the </FONT><A class="" title="Place file syntax (MSDN)" href="https://msdn2.microsoft.com/en-us/library/ms791456.aspx" mce_href="https://msdn2.microsoft.com/en-us/library/ms791456.aspx"><FONT face=georgia,palatino>place file</FONT></A><FONT face=georgia,palatino>&nbsp;provides a convenient way for specifying the target path under the root of the output folders. If taking advantage of the binplace step sounds too complicated, you may be right, a simple batch file containing a few copy commands could do the job. On a large project however, it is very easy to end up with a long build process. Skipping unnecessary massive file copying does help in making that shorter.</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>From Installscript to MSI</title>
      <link>https://docs.microsoft.com/archive/blogs/gremlininthemachine/from-installscript-to-msi</link>
      <pubDate>Tue, 28 Nov 2006 15:19:00 GMT</pubDate>
      <dc:creator><![CDATA[GremlinInTheMachine]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/gremlininthemachine/2006/11/28/from-installscript-to-msi/</guid>
      <description><![CDATA[We are prototyping the installer for our next version. We will be moving from an Installscript-based...]]></description>
      <content:encoded><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>We are prototyping the installer for our next version. We will be moving from an Installscript-based solution to an MSI-based solution. What is my thought process for re-designing and re-writing an installer in MSI? That is what I'll be writing about. <FONT face=georgia,palatino></FONT>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>The first decision is what tool to use. Because of the Installscript heritage in our installer, </FONT><A class="" title="Installshield Home Page" href="https://www.installshield.com/" mce_href="https://www.installshield.com/"><FONT face=georgia,palatino>Installshield</FONT></A><FONT face=georgia,palatino> is one candidate. Other choice being considered is </FONT><A class="" title="WiX Home Page" href="https://wix.sourceforge.net/" target=_blank mce_href="https://wix.sourceforge.net"><FONT face=georgia,palatino>WiX</FONT></A><FONT face=georgia,palatino>, the project led by </FONT><A class="" title="Robert Menschig's Blog" href="https://blogs.msdn.com/robmen" target=_blank mce_href="https://blogs.msdn.com/robmen"><FONT face=georgia,palatino>Rob Mensching</FONT></A><FONT face=georgia,palatino>. A third choice is scripting the </FONT><A class="" title="Installer API example on MSDN" href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/an_installation_example.asp" mce_href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/an_installation_example.asp"><FONT face=georgia,palatino>Windows Installer API</FONT></A><FONT face=georgia,palatino> directly. Something important to mention is that choosing one doesn't necessarily exclude the others, we want to find out what we can get from each tool. If the most effective solution is combining them, that is a good choice too (as long as it is cost effective, but the Windows Installer API and WiX are free and we already have Installshield licenses, so it is easy to make the case)</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>For evaluating the tools, I already have experience with MSI-based Installshield projects, a fresh look from another team member will be more effective. I will focus on WiX myself.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>Regarding WiX, the question in front of me at this time is: what version of WiX? We want to target MSI 4.0 so it should be WiX 3.x but, are all 3.x sufficiently stable for production? Where to find info on which versions are "good"? For individual development, the typical "get the latest and then upgrade" may be a good solution but one internal goal we'd like to achieve is that tools required for building<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>should be checked in the source control tree. I don't want to be upgrading often and causing a lot of churn.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=georgia,palatino>How good is the WiX project with regards to the balance between "stability" and "release often"? That is what I have to find out.</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=Georgia></FONT>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"><FONT face=Georgia>[edited:&nbsp;Corrected&nbsp;Rob's name]</FONT></P>]]></content:encoded>
    </item>
  </channel>
</rss>