<?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>when setup isn't just xcopy</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/robmen/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/robmen/feed.xml</link>
    <description>Rob Mensching on Software Installation and Open Source at Microsoft.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:27:13 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Goodbye, MSDN. I'm moving to https://RobMensching.com/blog.</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/goodbye-msdn-im-moving-to-httprobmensching-comblog</link>
      <pubDate>Tue, 05 Dec 2006 02:12:21 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/12/05/goodbye-msdn-im-moving-to-httprobmensching-comblog/</guid>
      <description><![CDATA[I started&nbsp;blogging three years ago when the MSDN blog site was still hosted on gotdotnet.&nbsp;...]]></description>
      <content:encoded><![CDATA[<p>I started&nbsp;blogging three years ago when the <a href="https://blogs.msdn.com/robmen/">MSDN blog</a> site was still hosted on <a href="https://blogs.gotdotnet.com/robmen/">gotdotnet</a>.&nbsp; Back then there were fifty or so Microsoft bloggers and people giggled when you said the word "blog".&nbsp; Now there are so many Microsoft blogs that nobody bothers to keep count any more.  <p>I toyed with the idea with hosting my own private blog a while ago but got real serious about it when I finally picked up the vanity domain <a href="https://RobMensching.com">https://RobMensching.com</a>.&nbsp; I was keeping tabs on the <a href="https://subtextproject.com/">Subtext project</a> because of my work on the <a href="https://blogs.msdn.com/robmen/archive/2005/10/15/481451.aspx">Internal blogs at Microsoft</a>&nbsp;but when <a href="https://haacked.com/archive/2006/08/31/Subtext_1.9_quotDaedelusquot_Released.aspx">Subtext finally supported medium trust</a> I figured it was ready to host my own blog.&nbsp; Finally, in November I pushed the huge reset button on life by <a href="https://blogs.msdn.com/robmen/archive/2006/10/26/joining-marketplace.aspx">changing jobs</a> and <a href="https://blogs.msdn.com/robmen/archive/2006/11/04/it-all-begins-in-november.aspx">getting married</a> all at the same time.&nbsp; I figured I might as well reset my presence in the <a href="https://en.wikipedia.org/wiki/Blogosphere">blogosphere</a>.  <p>You will now find my blog at <a href="https://RobMensching.com/blog">https://RobMensching.com/blog</a>.</p> <p>I have not decided what I'm going to do with this blog.&nbsp;&nbsp;&nbsp;Jascha and Didi have also been encouraging me to start posting on the <a href="https://blogs.msdn.com/windowsmarketplace">Windows Marketplace blog</a>.&nbsp; Maybe I'll cross-post&nbsp;Marketplace topics from my new blog to there.&nbsp; Honestly, though I think we first need to move the Windows Marketplace blog off MSDN and onto <a href="https://www.windowsmarketplace.com/">Windows Marketplace</a> itself.&nbsp; Maybe we could put it up at <a href="https://www.windowsmarketplace.com/blog">https://www.windowsmarketplace.com/blog</a>.</p> <p>Cross-posting there makes me consider cross-posting setup topics from my new blog to here, making this blog purely about setup things.&nbsp; Along those lines I've brought back the MSDN skin and the old blog title "when setup isn't just xcopy".&nbsp; However, don't be surprised if this blog just halts like <a href="https://blogs.msdn.com/dareObasanjo/">Dare's MSDN blog</a>&nbsp;and <a href="https://blogs.msdn.com/alexbarn/">Alex's MSDN blog</a>.</p> <p>Anyway, "Goodbye, MSDN!"&nbsp; It's been a fun few years but I'm moving out on my own.&nbsp; Please come visit me at my new home at <a href="https://RobMensching.com/blog">https://RobMensching.com/blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Orca is to hex editor as WiX is to ...?</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/orca-is-to-hex-editor-as-wix-is-to</link>
      <pubDate>Mon, 23 Oct 2006 11:00:53 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/23/orca-is-to-hex-editor-as-wix-is-to/</guid>
      <description><![CDATA[Jonathan Perret made the following interesting comment on a previous blog entry:  ...I find it...]]></description>
      <content:encoded><![CDATA[<p>Jonathan Perret made the <a href="https://blogs.msdn.com/robmen/archive/2006/10/17/wix-v3-syntax-for-detecting-the-clr.aspx#844211">following interesting comment on a previous blog entry</a>:</p> <blockquote> <p>...I find it worrisome that even when using such a powerful tool as WiX, one still has to memorize such oddities. I mean, if my app has a prereq it sounds obvious I don't want to require it to uninstall the app. Why can't WiX implement this for me ?</p> <p>Do you think it is a fair analogy to say that if Orca is like an hex editor then WiX would be MASM ? I.e. powerful for experts but every bit as dangerous ?</p></blockquote> <p>I'm going to address those in the opposite order.&nbsp; First, I often introduce the <a href="https://wix.sourceforge.net/">WiX toolset</a> as the C/C++ compiler/linker for MSI files.&nbsp; With C/C++ you can leak memory, deference NULL and all kinds of other things that the programmer probably didn't intend.&nbsp; The WiX toolset will similarly allow developers to do things that might not be what they actually intended.  <p>I think comparing the WiX toolset to MASM is cutting a bit too deep.&nbsp; There are many things the WiX toolset handles that the developer never has to worry about.&nbsp; Always lining up primary/foreign key references in the MSI database is an obvious one but there many others like the handling of the NULL property ([~]) in MULTI_SZ registry keys and the NT service groups and enabling distributed setup development through Fragments and linking.  <p>So why doesn't the WiX toolset just handle everything for the developer?&nbsp; The answer is quite simple: "Because a developer might actually need to do what you wanted protection from."&nbsp;  <p>In this particular case, I <a href="https://blogs.msdn.com/robmen/archive/2006/08/22/712812.aspx">provided guidance</a> that the Installed property should always be OR'd into your LaunchConditions.&nbsp;&nbsp;Doing so ensures that you can uninstall the application even if the condition is wrong.&nbsp; The WiX toolset could <em>probably</em> always automagically add "Installed OR" to LaunchConditions to make sure that this guidance is followed.  <p>But what if you as a developer actually need to block the uninstall of your application for some very specific reason?&nbsp; If the WiX toolset always adds "Installed OR" to the LaunchCondition the developer is now fundamentally screwed by the very tools that were supposed to be helping.&nbsp; Being a developer, I know that stupid tools trying to be smart are one of the fastest ways to infuriate a developer.  <p>Remember, one of the guiding principles of the WiX toolset is that if the Windows Installer supports the scenario then the WiX toolset does as well or it's a bug.  <p>So the question now is how do we&nbsp;enable developers do what they need to do while helping them avoid known pitfalls?&nbsp; I know of two methods, both of which are supported in the WiX toolset.  <p>1.&nbsp; <strong>Static code analysis.</strong>&nbsp; Tools that understand the code and point out things that you probably did not intend are wickedly cool.&nbsp; Visual Studio added static analysis features in VS2005.&nbsp; The Windows Installer has actually had static analysis since the late 1990s.&nbsp; It's called "validation" and msival2.exe and Orca both support it.&nbsp; In WiX v3, light.exe now runs the same static code analysis after every build and there is a tool called smoke.exe that you can use to analyze MSI files without building.  <p>That said, today there is no rule that checks for the Installed property in LaunchConditions but it seems like a great thing to open as a <a href="https://sourceforge.net/tracker/?group_id=105970&amp;atid=642717">Feature Request</a>, Jonathan.  <p>2.&nbsp; <strong>Higher level languages.</strong>&nbsp; I am obviously biased but I don't believe you will find&nbsp;a better low-level language for creating Windows Installer databases than WiX.&nbsp; You can edit the .wxs files directly, use a GUI that converts the WiX elements into graphical concepts, or build another language that generates .wxs files and build your MSI files that way.&nbsp; Higher level languages&nbsp;can be more simplistic&nbsp;because they target a specific need.  <p>For example, I haven't talked about <a href="https://wix.sourceforge.net/clickthrough.html">ClickThrough</a> much lately but if you look at the language required to describe an Isolated Application in ClickThrough, I think you'll agree it's much higher level.  <p>&lt;IsolatedApp xmlns="<a href="https://wix.sourceforge.net/schemas/clickthrough/isolatedapp/2006">https://wix.sourceforge.net/schemas/clickthrough/isolatedapp/2006"</a>&gt;<br>&nbsp;&nbsp; &lt;Package&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Feed&gt;<a href="https://localhost/ct/dc/DrizzleCast.feed">https://localhost/ct/dc/DrizzleCast.feed</a>&lt;/Feed&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp; &lt;UpdateRate&gt;1&lt;/UpdateRate&gt;<br>&nbsp;&nbsp; &lt;/Package&gt;<br>&nbsp;&nbsp; &lt;Application&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp; &lt;EntryPoint&gt;DrizzleCast.exe&lt;/EntryPoint&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp; &lt;Source&gt;C:\build\dc&lt;/Source&gt;<br>&nbsp;&nbsp; &lt;/Application&gt;<br>&lt;/IsolatedApp&gt;  <p>For more information check out this <a href="https://blogs.msdn.com/robmen/archive/2005/12/06/500737.aspx">blog entry about "domain specific languages"</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>WiX v3 syntax for detecting the CLR.</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/wix-v3-syntax-for-detecting-the-clr</link>
      <pubDate>Tue, 17 Oct 2006 13:54:57 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/17/wix-v3-syntax-for-detecting-the-clr/</guid>
      <description><![CDATA[Duane Johnson asked how to use WiX v3 to detect the CLR.&nbsp; Extensions in WiX v3 are far more...]]></description>
      <content:encoded><![CDATA[<p><a href="https://blogs.msdn.com/robmen/archive/2006/10/05/Thursday-Night-_2600_quot_3B00_Deployment-Dinner-Discussion_2600_quot_3B00_-with-Charlie-Poole_2E00_.aspx#822238">Duane Johnson asked how to use WiX v3 to detect the CLR</a>.&nbsp; Extensions in <a href="https://wix.sourceforge.net/downloadv3.html">WiX v3</a> are far more powerful than they were in <a href="https://wix.sourceforge.net/downloadv2.html">WiX v2</a>.&nbsp; Unfortunately, to enable the new features a few things moved around.&nbsp; </p> <p>So, let's say you wanted to to ensure that the .NET Framework 2.0 is already installed.&nbsp; All you have to do is add the following to your setup source code somewhere under the Product element:</p><pre>&lt;PropertyRef Id="NETFRAMEWORK20"/&gt;
&lt;Condition Message="The .NET Framework 2.0 must be installed"&gt;
&nbsp;&nbsp; Installed OR NETFRAMEWORK20
&lt;/Condition&gt;</pre>
<p>To compile that snippet (and answer Duane's question) using the WiX v3 toolset, you'd do the following:</p><pre>candle -ext WixNetFxExtension my.wxs
light -ext WixNetFxExtension my.wixobj</pre>
<p>That should create "my.msi" that will only install if you have the .NET Framework 2.0 already installed.&nbsp; We continue to grow the list of Properties that the WiX toolset handles for you automatically.&nbsp; For example, we already have searches for many of the Microsoft Office SKUs and Visual Studio as well.&nbsp; We're also always looking for more built-in searches so if you have them and would like to contribute them to the community, send email to wix-devs @ lists.sourceforge.net.</p>
<p>Finally, for the intrepid reader at home, do you know why I OR'd the "Installed" Property into the LaunchCondition example above?&nbsp; When you think you know, check out <a href="https://blogs.msdn.com/robmen/archive/2006/08/22/712812.aspx">this previous blog entry</a>&nbsp;for the answer.</p>]]></content:encoded>
    </item>
    <item>
      <title>Deciphering the MSI Directory table, part 7 (directories are properties)</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/deciphering-the-msi-directory-table-part-7-directories-are-properties</link>
      <pubDate>Tue, 17 Oct 2006 13:27:03 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/17/deciphering-the-msi-directory-table-part-7-directories-are-properties/</guid>
      <description><![CDATA[In my last blog entry, I wrapped up saying that we'd talk about how to make your install directory...]]></description>
      <content:encoded><![CDATA[<p>In my last blog entry, I wrapped up saying that we'd talk about how to make your install directory configurable this time.&nbsp; I'm sorry but I lied.&nbsp; There is an important but confusing truth that you must understand before we continue.&nbsp; Directories are Properties.</p> <p>Some of you may have already caught on to this because the <a href="https://windowssdk.msdn.microsoft.com/en-us/library/aa372057.aspx">MSI SDK documentation for what I call standard directories</a> is labeled "System Folder Properties".&nbsp; Also, if you at the <a href="https://windowssdk.msdn.microsoft.com/en-us/library/aa370881.aspx">ProgramFilesFolder directory</a> you'll see it's actually called the "ProgramFilesFolder Property".&nbsp; I've avoided using the word "Property" to describe what we've known as "Directory identifier" until now to avoid confusion.</p> <p>So what does it mean that Directories are really Properties?</p> <p>Well, for one, it means that anywhere you can put a Property reference, you can put a Directory identifier instead.&nbsp; When the Windows Installer resolves a Directory identifier as a Property it gets the full path for the directory.&nbsp; For example you could put "[ProgramFilesFolder]" in the Value column of the <a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/registry_table.asp">Registry table</a>&nbsp;and get the full path to the Program Files directory in the registry key.&nbsp;See the <a href="https://windowssdk.msdn.microsoft.com/en-us/library/aa370881.aspx">Formatted topic in the MSI SDK</a> for more information.&nbsp; Also, remember from our <a href="https://blogs.msdn.com/robmen/archive/2005/07/12/437912.aspx">previous examples</a>, that all Windows Installer paths end with a backslash.</p> <p>The fact that Directories are Properties also means that <a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/custom_action_type_51.asp">Type 51 CustomActions</a> can be used to change install locations.&nbsp; But we'll talk more about that next time...</p>]]></content:encoded>
    </item>
    <item>
      <title>Deciphering the MSI Directory table, part 6 (standard directories)</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/deciphering-the-msi-directory-table-part-6-standard-directories</link>
      <pubDate>Thu, 12 Oct 2006 11:05:00 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/12/deciphering-the-msi-directory-table-part-6-standard-directories/</guid>
      <description><![CDATA[Before picking up this series of blog entries on the Directory table&nbsp;again, I went back and...]]></description>
      <content:encoded><![CDATA[<P>Before picking up <A href="https://blogs.msdn.com/robmen/archive/2005/11/04/489346.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/11/04/489346.aspx">this</A> <A href="https://blogs.msdn.com/robmen/archive/2005/07/12/437912.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/07/12/437912.aspx">series</A> <A href="https://blogs.msdn.com/robmen/archive/2005/07/04/435572.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/07/04/435572.aspx">of</A> <A href="https://blogs.msdn.com/robmen/archive/2005/06/28/433241.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/06/28/433241.aspx">blog</A> <A href="https://blogs.msdn.com/robmen/archive/2005/06/21/431294.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/06/21/431294.aspx">entries</A> on the <A href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/directory_table.asp" mce_href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/directory_table.asp">Directory table</A>&nbsp;again, I went back and re-read all the previous entries to make sure I remembered the details told up to this point.&nbsp; It was then that I realized the last entry on this series as posted over 11 months ago.&nbsp; What disturbed me even more than the fact that I didn't realize I had dropped this series for so long (I thought I had posted in the last three months) was this quote:</P>
<BLOCKQUOTE>
<P>The first paragraph of <A href="https://blogs.msdn.com/robmen/archive/2005/06/21/431294.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/06/21/431294.aspx">part 1</A> surprised me because it reminded me how long I've been operating under <A href="https://blogs.msdn.com/robmen/archive/2005/10/15/481464.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/10/15/481464.aspx">frustration</A>.</P></BLOCKQUOTE>
<P>For some people this blog series will be deciphering the MSI Directory table.&nbsp; For me this blog series will provide guide posts for a path I should never follow again.&nbsp; But enough of that.&nbsp; Let's get to the point and talk about standard directories in the Directory table.</P>
<P>As always I'm going to start with some example data.&nbsp; If this stuff doesn't look familiar (that's okay, it's been almost a year) I suggest going back and (re)reading <A href="https://blogs.msdn.com/robmen/archive/2005/11/04/489346.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2005/11/04/489346.aspx">part 5</A>.&nbsp; Here's a Directory table modified from our part 5.</P><PRE>Directory           Directory_Parent      DefaultDirs
s72                 S72                   l255
Directory           Directory
TARGETDIR                                 SourceDir
ProgramFilesFolder  TARGETDIR             PFiles
FirstFolder         ProgramFilesFolder    One
</PRE>
<P>Based on what we've learned thus far, you should expect that Directory table to create the following layouts:</P><PRE><STRONG>Target layout</STRONG>
ProgramFilesFolder = TARGETDIR\PFiles\
FirstFolder        = TARGETDIR\PFiles\One\

<STRONG>Source layout
</STRONG>ProgramFilesFolder = SourceDir\PFiles\
FirstFolder        = SourceDir\PFiles\One\
</PRE>
<P>You'd be half correct.&nbsp; The source layout would look exactly like that.&nbsp; However, the target layout would be quite different.&nbsp; The magic is in the <A href="https://windowssdk.msdn.microsoft.com/en-us/library/aa370881.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/aa370881.aspx">ProgramFilesFolder identifier</A>.&nbsp; That's because ProgramFilesFolder is what I call a standard directory.&nbsp; The MSI SDK has the <A href="https://windowssdk.msdn.microsoft.com/en-us/library/aa372057.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/aa372057.aspx">full list of standard directories</A>.</P>
<P>So how does it work?&nbsp; </P>
<P>Well, when the Windows Installer scans the Directory table, it converts the standard directory identifiers into the appropriate paths on the machine.&nbsp; For example, ProgramFilesFolder turns into the value returned by <A href="https://windowssdk.msdn.microsoft.com/en-us/library/ms647764.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/ms647764.aspx">::SHGetFolderPath()</A> for <A href="https://windowssdk.msdn.microsoft.com/en-us/library/ms649274.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/ms649274.aspx">CSIDL_PROGRAM_FILES</A> which is usually something like "C:\Program Files\".&nbsp; The <A href="https://windowssdk.msdn.microsoft.com/en-us/library/aa369768.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/aa369768.aspx">LocalAppDataFolder</A> identifier is the value returned for <A href="https://windowssdk.msdn.microsoft.com/en-us/library/ms649274.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/ms649274.aspx">CSIDL_LOCAL_APPDATA</A> which is usually something like "C:\Documents and Settings\<I>username</I>\Local Settings\Application Data\".</P>
<P>That means that our target layout actually looks something like this:</P><PRE><STRONG>Target layout</STRONG>
ProgramFilesFolder = ProgramFiles\
FirstFolder        = ProgramFiles\One\
</PRE>
<P><EM>Note: "ProgramFiles" is intended to represent wherever "C:\Program Files\" actually exists on the user's machine.&nbsp; You should never expect ProgramFiles to be on the C: drive or even in "Program Files".&nbsp; I say this because the "Program Files" string is localized, that'll getcha' for sure.</EM></P>
<P>This means that the FirstFolder directory will always be under ProgramFilesFolder.&nbsp; Next time we'll see how to allow the user to configure where your application gets installed.&nbsp; In the meantime, I&nbsp;would encourage you to take a look at that <A href="https://windowssdk.msdn.microsoft.com/en-us/library/aa372057.aspx" mce_href="https://windowssdk.msdn.microsoft.com/en-us/library/aa372057.aspx">list of standard directories</A> the Windows Installer provides you.</P>]]></content:encoded>
    </item>
    <item>
      <title>Conflicts of Interest?</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/conflicts-of-interest</link>
      <pubDate>Tue, 10 Oct 2006 11:55:01 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/10/conflicts-of-interest/</guid>
      <description><![CDATA[Nicholas Carr has a great blog entry about conflicts of interest in blogging.&nbsp; It got me...]]></description>
      <content:encoded><![CDATA[<p><a href="https://roughtype.com">Nicholas Carr</a> has a great <a href="https://www.roughtype.com/archives/2006/10/a_glass_house.php">blog entry about conflicts of interest in blogging</a>.&nbsp; It got me thinking about&nbsp;a silent policy I've always had for myself when blogging here.&nbsp; I don't blog about the many vendors in the MSI creation space except the ones that I am affiliated with.&nbsp; Namely I write about the <a href="https://wix.sourceforge.net/">WiX toolset</a>&nbsp;(because I lead that effort)&nbsp;and&nbsp;sometimes VisualStudio's Setup Projects (because I work for Microsoft and I'm often asked to relate it to WiX ).&nbsp; I don't write about <a href="https://www.macrovision.com/products/flexnet_installshield/index.shtml">InstallShield</a> or <a href="https://www.wise.com/Products/Installations/WiseforWindowsInstaller.aspx">Wise</a> or the many, many others.</p> <p>My question to those of you who read my blog regularly is, "Do you think this policy is a good one and should I keep following it?"&nbsp; Please, leave a comment below or send me a comment through the <a href="https://blogs.msdn.com/robmen/contact.aspx">contact link</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Nothing.</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/nothing</link>
      <pubDate>Sun, 08 Oct 2006 00:18:18 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/08/nothing/</guid>
      <description><![CDATA[Thus far, today I have done absolutely nothing.&nbsp; Sure, I cleaned off the kitchen table, put...]]></description>
      <content:encoded><![CDATA[<p>Thus far, today I have done absolutely nothing.&nbsp; Sure, I cleaned off the kitchen table, put away some dishes and folded some clothes.&nbsp; But I didn't really do anything.&nbsp; I spent a few hours playing through a few demo disks DJ lent me for the new <a href="https://www.xbox.com/en-US/hardware/xbox360">Xbox 360</a>.&nbsp; But that accomplished nothing. &nbsp;Most recently I've been catching up on random blog entries posted by people I follow.&nbsp; Like <a href="https://www.25hoursaday.com/weblog/">Dare</a>, <a href="https://blogs.msdn.com/oldnewthing/default.aspx">Raymond</a> and&nbsp;<a href="https://blogs.msdn.com/astebner/default.aspx">Aaron</a>. But nothing will come of that tonight.</p> <p>What I've found&nbsp;amazing is that it actually feels good.&nbsp; Normally, I'd be itching to make at least some progress on at least one of the many projects that I'm currently juggling.&nbsp; But today I really did nothing.</p> <p>So, I hope one of you out there is coding tonight because right now I'm obviously not holding up my end of the deal.&nbsp; I blame it on last night's <a href="https://en.wikipedia.org/wiki/Irish_car_bomb">carbombs</a>.&nbsp; &lt;smile/&gt;</p>]]></content:encoded>
    </item>
    <item>
      <title>Thursday Night "Deployment Dinner Discussion" with Charlie Poole.</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/thursday-night-deployment-dinner-discussion-with-charlie-poole</link>
      <pubDate>Fri, 06 Oct 2006 02:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/06/thursday-night-deployment-dinner-discussion-with-charlie-poole/</guid>
      <description><![CDATA[Tonight I traveled to Anthony's Beach Cafe in Edmonds, WA to have dinner with Charlie Poole.&nbsp;...]]></description>
      <content:encoded><![CDATA[<P>Tonight I traveled to <A href="https://www.anthonys.com/restaurants/info/edmonds.html#2nd" mce_href="https://www.anthonys.com/restaurants/info/edmonds.html#2nd">Anthony's Beach Cafe</A> in Edmonds, WA to have dinner with <A href="https://www.charliepoole.org/" mce_href="https://www.charliepoole.org/">Charlie Poole</A>.&nbsp; Charlie is the active maintainer of the <A href="https://www.nunit.org/" mce_href="https://www.nunit.org/">NUnit project</A>.&nbsp; He contacted me (via my blog, IIRC) and we set up tonight's meeting.&nbsp; I expected he wanted to meet because <A href="https://nunit.com/blogs/?p=39" mce_href="https://nunit.com/blogs/?p=39">NUnit is now using the WiX toolset too</A>.</P>
<P>Charlie did want to talk a little about WiX but we&nbsp;discussed a myriad of other topics as well for the two+ hours we were there.&nbsp; In fact, we shut the place down.&nbsp; Only the cooks were left cleaning when we walked out.</P>
<P>The most interesting setup related topic was something Charlie thought I wouldn't be interested in.&nbsp; NUnit is all managed code.&nbsp; It supports all versions of the CLR as well as Mono.&nbsp; Charlie told me he had written the detection logic for all the CLR versions and Mono.&nbsp; I told him that the <A href="https://wix.sourceforge.net/" mce_href="https://wix.sourceforge.net/">WiX toolset</A> already had the detection logic for the CLR and he should just use that but I was very interested in getting the Mono detection logic into WiX.</P>
<P>Charlie was surprised by both answers.&nbsp; He asked how to use the CLR detection in WiX v2 now.&nbsp; I didn't have the answer off the top of my head, but now that I'm home here's how you do it.&nbsp; Add any (or all) of following to one of your .wxs files:</P><PRE>&lt;PropertyRef Id="NETFRAMEWORK10"/&gt;
&lt;PropertyRef Id="NETFRAMEWORK11"/&gt;
&lt;PropertyRef Id="NETFRAMEWORK20"/&gt;
&lt;PropertyRef Id="NETFRAMEWORK30"/&gt;</PRE>
<P>Then you need to add the "netfx.wixlib" to your link line like so:</P><PRE>light my.wixobj netfx.wixlib -o my.msi</PRE>
<P>That will add the appropriate detection logic to your MSI for the CLR using the WiX v2 toolset (WiX v3 command line syntax is a bit different).&nbsp; Hopefully Charlie send back the Mono detection logic in a "mono.wixlib".&nbsp; Over time, I hope WiX will have all these sorts of things done for you in many prebuilt .wixlibs.</P>
<P>We also discussed Charlie's adventures in Europe learning and talking about Agile/XP methodologies, including what sounded like a fun trip with <A href="https://c2.com/~ward/" mce_href="https://c2.com/~ward/">Ward Cunningham</A>.&nbsp; I also asked a number of questions about his consulting work.</P>
<P>Another interesting topic we came upon was talking about our different Open Source projects.&nbsp; Charlie mentioned he had communicated with <A href="https://tirania.org/blog/" mce_href="https://tirania.org/blog/">Miguel de Icaza</A>&nbsp;when struggling with is project.&nbsp; I think you can see a bit of that in his <A href="https://nunit.com/blogs/?p=12" mce_href="https://nunit.com/blogs/?p=12">blog entry about the exaggerated death of NUnit</A>.&nbsp; We then discussed the relation of our Open Source projects with Microsoft.&nbsp; Charlie asked why not make <A href="https://blogs.msdn.com/robmen/archive/2006/09/18/761580.aspx" mce_href="https://blogs.msdn.com/robmen/archive/2006/09/18/761580.aspx">WiX the foundation of Visual Studio setup projects</A>.&nbsp; I told him I would love for that to work out.&nbsp; Then I asked him about NUnit and VSTS.&nbsp; Charlie pointed out that VSTS isn't structured properly to do true test driven development (TDD) but said he enjoyed the competition.</P>
<P>All in all, it was a great dinner and I look forward to crossing paths with Charlie Poole in the future.&nbsp; </P>]]></content:encoded>
    </item>
    <item>
      <title>The Windows Live Writer team rocks.</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/the-windows-live-writer-team-rocks</link>
      <pubDate>Thu, 05 Oct 2006 11:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/05/the-windows-live-writer-team-rocks/</guid>
      <description><![CDATA[I installed Windows Live Writer 1.0 Beta a while ago to test a project I was working on.&nbsp; I...]]></description>
      <content:encoded><![CDATA[<p>I installed <a href="https://windowslivewriter.spaces.live.com/">Windows Live Writer 1.0 Beta</a> a while ago to test a project I was working on.&nbsp; I didn't actually boot the application or anything, just installed it.&nbsp; I think this proves how much of a setup geek I am.&nbsp; &lt;smile/&gt;</p> <p>Well, as you can see in my <a href="https://blogs.msdn.com/robmen/archive/2006/09/30/778315.aspx">previous blog entry</a>, I actually tried using Windows Live Writer.&nbsp; I must say, in the short time I've used it, I'm impressed.&nbsp; The UI is very intuitive.&nbsp; The HTML generated is very clean.&nbsp; The ability to preview the post using the styles from my blog is sweet.&nbsp; I love the way that "Recent Posts" and "Drafts" are tracked seamlessly.</p> <p>That said, I have had some small issues with cut and paste not doing exactly what I expected (whitespace just disappeared).&nbsp; Window Live Writer also doesn't provide an easy way for me to add code snippets to blog entries (awesome if it was supported just like blockquote).&nbsp; But I can edit the HTML directly to add PRE elements and Writer seems to handle that pretty well.</p> <p>But this blog entry isn't supposed to be about Windows Live Writer <em>application</em>.&nbsp; Instead, I wanted to talk about the Windows Live Writer <em>team</em>.&nbsp; </p> <p>I met three of the developers on the Writer team a month or so ago: Bonnie, Joe and Spike.&nbsp; We had a great discussion for almost two hours after work one Thursday.&nbsp; One of the things I remember most is when we were discussing Beta feedback Joe commented sheepishly, "Probably the biggest mistake we made was not including the word 'blogging' in our dictionary.&nbsp; Lots of people complained about that."&nbsp; I chuckled when I posted my last blog entry because I did have to add "blogging" to the dictionary when the spell checker complained.</p> <p>&nbsp;But even more important than the interesting conversation I had with Bonnie, Joe, and Spike, I saw something I hadn't seen inside Microsoft for so long I had almost forgotten to look for it.&nbsp; This team is <em>hungry</em>.</p> <p>They aren't just building a simple blogging tool.&nbsp; They are building a blogging tool that beginners can be comfortable with while meeting advanced users basic needs.&nbsp; Then they released an <a href="https://windowslivewriter.spaces.live.com/blog/cns!D85741BB5E0BE8AA!702.entry">update to their Beta</a> based on user feedback.&nbsp; Next they made their <a href="https://dev.live.com/writer">application a platform</a> and opened up an untold number of new uses.&nbsp; And most importantly they didn't blink when it was suggested Windows Live Writer wasn't necessary because Word 2007 would support blogging too&nbsp;(as <a href="https://blogs.msdn.com/uac/archive/2005/12/20/Chris_Corio.aspx">Chris Corio</a> might say, "The two apps are in completely different markets, yo!").</p> <p>It wasn't until I was driving away that evening that the last piece of the puzzle clicked in my head.&nbsp; Windows Live Writer was created by the same team that brought us <a href="https://www.onfolio.com/">Onfolio</a>.&nbsp; This team of hungry developers was acquired from the "outside".</p> <p>That realization eventually crystallized into something that I have been feeling for a year or more.&nbsp; It feels like many developers at Microsoft are "playing to not lose".&nbsp; What I saw in the Windows Live Writer team was a small group of developers "<a href="https://www.amazon.com/Play-Win-Choosing-Growth-Over/dp/1885167318">playing to win</a>".&nbsp; I loved that.&nbsp; It's past time for me to do the same.</p>]]></content:encoded>
    </item>
    <item>
      <title>SharpDevelop 2.1 - the latest WiX UI Editor</title>
      <link>https://docs.microsoft.com/archive/blogs/robmen/sharpdevelop-2-1-the-latest-wix-ui-editor</link>
      <pubDate>Tue, 03 Oct 2006 02:32:25 GMT</pubDate>
      <dc:creator><![CDATA[Rob Mensching (ex-MSFT)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/robmen/2006/10/03/sharpdevelop-2-1-the-latest-wix-ui-editor/</guid>
      <description><![CDATA[I was cleaning out some old mail messages and came across this tidbit of information that several...]]></description>
      <content:encoded><![CDATA[<p>I was cleaning out some old mail messages and came across this tidbit of information that several people sent me.&nbsp; <a href="https://community.sharpdevelop.net/blogs/mattward/archive/2006/09/17/WixIntegration.aspx">SharpDevelop 2.1 now supports the WiX toolset</a>.&nbsp; At the same time, I noticed that <a href="https://community.sharpdevelop.net/blogs/mattward/archive/2006/09/04/NewWixInstallerForSharpDevelop21.aspx">SharpDevelop 2.1 moved to WiX</a> to build its setup packages.&nbsp; I took a quick scan through their MSI and it looks like a very well authored WiX v2 package.&nbsp; They even use the standard UI and NGEN CustomActions provided by the WiX toolset.&nbsp; Very nicely done.</p> <p>SharpDevelop joins <a href="https://wixedit.sourceforge.net/">WiXEDIT</a> and <a href="https://wixtool.org/">WiXTool</a>&nbsp;as another freely available UI for editing .wxs files.&nbsp; I'll stick to <a href="https://wix.sourceforge.net/votive.html">Votive</a> (for Intelli-sense) and <a href="https://www.flos-freeware.ch/notepad2.html">notepad2</a> (for quick edits with syntax highlighting) but those of you looking for a UI might find one of those three tools interesting.&nbsp; At least until we <a href="https://blogs.msdn.com/robmen/archive/2006/09/18/761580.aspx">convince Visual Studio to support the WiX toolset</a>.&nbsp; &lt;smile/&gt;</p>]]></content:encoded>
    </item>
  </channel>
</rss>