<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joy of Setup &#187; Windows Installer</title>
	<atom:link href="http://www.joyofsetup.com/category/msi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joyofsetup.com</link>
	<description>Bob Arnson on setup and servicing with WiX and MSI</description>
	<lastBuildDate>Wed, 01 Feb 2012 05:01:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Getting shelf space in the Store</title>
		<link>http://www.joyofsetup.com/2012/02/01/getting-shelf-space-in-the-store/</link>
		<comments>http://www.joyofsetup.com/2012/02/01/getting-shelf-space-in-the-store/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 05:01:28 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Etc]]></category>
		<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/?p=304</guid>
		<description><![CDATA[Reading the Windows Store for developers blog recently, I was pleasantly surprised to see that desktop (i.e., non-Metro-style) apps would be allowed to show up in the Windows Store. Desktop apps won&#8217;t get the same treatment as Metro-style apps, of &#8230; <a href="http://www.joyofsetup.com/2012/02/01/getting-shelf-space-in-the-store/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Reading the <a href="http://blogs.msdn.com/b/windowsstore/archive/2012/01/20/designing-the-windows-store-user-experience.aspx">Windows Store for developers blog</a> recently, I was pleasantly surprised to see that desktop (i.e., non-Metro-style) apps would be allowed to show up in the Windows Store. Desktop apps won&#8217;t get the same treatment as Metro-style apps, of course; instead of being able to install apps right from the Windows Store, desktop apps will have a similar listing page with a link to the developer&#8217;s site to handle download.</p>
<p>Still, it&#8217;s better than nothing &#8212; the Windows Store is likely to have a lot of window shoppers looking to buy apps.</p>
<p>However, a hurdle to get an app listing page is that the app must pass &#8220;certification.&#8221; In the past, this was known as the Windows Logo program and had many pages of technical requirements. In <a href="http://msdn.microsoft.com/library/windows/desktop/hh749939">Windows 8, the list is much smaller</a> and less prescriptive. For example, the Logo program for previous versions required the use of MSI, then required MSI or ClickOnce; for Windows 8, there are no technology restrictions.</p>
<p>Some requirements that struck me as interesting:</p>
<blockquote><p>1.2 Your app must not take a dependency on the VB6 runtime</p></blockquote>
<p>VB6, IE6 &#8212; anything v6 must go away. <img src='http://www.joyofsetup.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>5.1 Your app must properly implement a clean, reversible installation</p>
<p>If the installation fails, the app should be able to roll it back and restore the machine to its previous state.</p></blockquote>
<p>If Windows 8 certification is anything like previous versions&#8217;, it will involve automated test suites that will highlight rollback that&#8217;s less than perfect.</p>
<blockquote><p>5.4 Your app must never block silent install/uninstall</p></blockquote>
<p>So don&#8217;t throw UI from custom actions and don&#8217;t rely on being able to prompt the user (i.e., also don&#8217;t break requirement #5.1).</p>
<blockquote><p>6.1 All executable files (.exe, .dll, .ocx, .sys, .cpl, .drv, .scr) must be signed with an Authenticode certificate</p></blockquote>
<p>MSI packages aren&#8217;t mentioned. But if you ship a Burn bundle or other bootstrapper .exe, that&#8217;s going to require signing.</p>
<blockquote><p>10.1 Your app must be installed in the Program Files folder by default</p></blockquote>
<p>There&#8217;s nothing mentioned that would exempt per-user apps in general from this requirement, though you can always request exceptions. Given the emphasis Metro places on per-user, restricted apps, perhaps this requirement will be extended/relaxed for per-user desktop apps too.</p>
<blockquote><p>10.6 Your app must write user data at first run and not during the installation in “per-machine” installations</p></blockquote>
<p>Long-time readers of <a href="http://wix.sourceforge.net/mailinglists.html#wix-users">wix-users</a> will recognize this as advice given again and again. Good to see Windows catching on. <img src='http://www.joyofsetup.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>10.7 Exceptions and Waivers</p>
<p>A waiver is required for apps that write to the global assembly cache (GAC) .NET apps should keep assembly dependencies private, and store it in the app directory unless sharing an assembly is explicitly required.</p></blockquote>
<p>I suspect it&#8217;s a response to the GAC getting used too often when it&#8217;s not needed or very useful. (See also Rico Mariani&#8217;s <a href="http://blogs.msdn.com/b/ricom/archive/2012/01/31/ngen-or-not-the-rules-haven-t-changed-very-much-since-2004.aspx">blog post on using NGen</a>, which falls into the same boat.) Still, I&#8217;m mildly surprised to see it a requirement.</p>
<blockquote><p>12.5 App running under the WoW64 emulator should not attempt to subvert or bypass Wow64 virtualization mechanisms</p></blockquote>
<p>This one&#8217;s interesting, depending how struct &#8220;subvert&#8221; turns out to be. For example, several WiX custom actions make fairly trivial &#8220;subversions&#8221; of WoW64 to avoid the need for both 32-bit and 64-bit custom actions just to write to the right version of Program Files.</p>
<p>All in all, there&#8217;s nothing terribly surprising in this set of requirements. A lot of them just codify what&#8217;s already known as best practice for Windows apps in the age of UAC. Of course, this is just the first version of the certification requirements and Windows 8 isn&#8217;t yet shipping; there&#8217;s plenty of time for Microsoft to add, drop, or change requirements. In the end, you get to decide whether the effort of certification is worth having a presence in the Windows Store. Remember the Metro-style app folks, who have no choice in the matter: The Windows Store is the only way they can ship.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2012/02/01/getting-shelf-space-in-the-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Same as it ever was</title>
		<link>http://www.joyofsetup.com/2011/09/15/same-as-it-ever-was/</link>
		<comments>http://www.joyofsetup.com/2011/09/15/same-as-it-ever-was/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 20:32:46 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[WiX]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/?p=282</guid>
		<description><![CDATA[Microsoft&#8217;s BUILD conference is going on this week and it&#8217;s chock full of new information about Windows 8 (or whatever they end up calling it). The biggest news is the new Metro-style application, which includes the AppX package format for &#8230; <a href="http://www.joyofsetup.com/2011/09/15/same-as-it-ever-was/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Microsoft&#8217;s <a href="http://www.buildwindows.com/">BUILD conference</a> is going on this week and it&#8217;s chock full of new information about Windows 8 (or whatever they end up calling it). The biggest news is the new Metro-style application, which includes the AppX package format for installing them.</p>
<p>There are three primary buckets applications fall into in the brave new Windows 8 world:</p>
<ol>
<li>Metro-style</li>
<li>Windows 8 non-Metro-style</li>
<li>&#8220;Retro-style&#8221; (aka legacy, anything created before 2011)</li>
</ol>
<p>Metro-style apps get all the goodies Windows 8 offers, including AppX packaging I&#8217;ll blog about. As <a href="http://robmensching.com/blog/posts/2011/9/13/Setup-in-Windows-8-and-Visual-Studio">Rob describes</a>, deployment is a first-class citizen in Windows 8. Apps in the other two buckets have the exact same options they have in Windows 7. And by exact, I mean &#8220;really, almost exactly 100 percent.&#8221;</p>
<h2>No soup for you</h2>
<p>As is its wont, rather than fixing the weaknesses of its existing platform, Microsoft replaced it with an all-new platform with a different set of weaknesses. Naturally, Windows 8 still includes Windows Installer. But if you were hoping for some of the same deployment love for your non-Metro-style apps that the Windows team showered on Metro-style apps, I&#8217;m sorry to disappoint: For better or worse, Windows 8&#8242;s MSI is functionally identical to Windows 7&#8242;s MSI v5.0.</p>
<p>A quick spelunking in the Windows 8 SDK available to MSDN subscribers reveals mostly structual changes to the MSI header files. For example, the _WIN32_MSI macro is defined as &#8220;500&#8243; for both Windows 7 and Windows 8:</p>
<pre style="padding-left: 30px;">#if (_WIN32_WINNT &gt;= 0x0601 || (defined(NTDDI_VERSION) &amp;&amp; NTDDI_VERSION &gt;= NTDDI_WIN8))
 #define _WIN32_MSI   500
#elif (_WIN32_WINNT &gt;= 0x0601 || (defined(NTDDI_VERSION) &amp;&amp; NTDDI_VERSION &gt;= NTDDI_WIN7))
 #define _WIN32_MSI   500</pre>
<p style="padding-left: 30px;">The only addition is a new MSIARCHITECTUREFLAGS value in Msi.h:</p>
<pre style="padding-left: 30px;">typedef enum tagMSIARCHITECTUREFLAGS
{
 MSIARCHITECTUREFLAGS_X86   = 0x00000001L, // set if creating the script for i386 platform
 MSIARCHITECTUREFLAGS_IA64  = 0x00000002L, // set if creating the script for IA64 platform
 MSIARCHITECTUREFLAGS_AMD64 = 0x00000004L, // set if creating the script for AMD64 platform
 MSIARCHITECTUREFLAGS_ARM   = 0x00000008L //set if creating the script for ARM platform
}MSIARCHITECTUREFLAGS;</pre>
<p>and a new property name in MsiDefs.h:</p>
<pre style="padding-left: 30px;">#define IPROPNAME_ARM              TEXT("Arm")</pre>
<p>As we&#8217;ve known for a while that Windows 8 will support the ARM architecture, its presence isn&#8217;t too surprising.</p>
<p>There are no other new enumeration values. There are no new MSI API functions. While it&#8217;s possible there are, for example, new standard actions that wouldn&#8217;t have visible impact in the header files, I don&#8217;t find it too likely.</p>
<p>That yields two tiny bits of good news:</p>
<ol>
<li>Lack of visible interface changes probably means a lack of visible behavior changes. That likely means that your Retro-style installers will probably work without change, or at least as well as the classic Windows 8 desktop supports Retro-style apps.</li>
<li>WiX and Burn won&#8217;t need to do anything to support Windows 8. OK, that&#8217;s something only a few of us need to worry about&#8230;</li>
</ol>
<p>Coming up: More about Metro-style deployment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2011/09/15/same-as-it-ever-was/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experimental results part II</title>
		<link>http://www.joyofsetup.com/2010/10/09/experimental-results-part-ii/</link>
		<comments>http://www.joyofsetup.com/2010/10/09/experimental-results-part-ii/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 22:02:11 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[WiX]]></category>
		<category><![CDATA[bugs]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/?p=224</guid>
		<description><![CDATA[It&#8217;s been four-plus months since Experimental results part I. All reports point to The Experiment being a success so it&#8217;s time to make it permanent. Today I checked in a change that defaults to opting-out of the troublesome disk-costing dialog &#8230; <a href="http://www.joyofsetup.com/2010/10/09/experimental-results-part-ii/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been four-plus months since <a href="http://www.joyofsetup.com/2010/05/28/experimental-results-part-i/">Experimental results part I</a>. All reports point to <a href="../2010/05/20/its-time-to-experiment/">The Experiment</a> being a success so it&#8217;s time to make it permanent. Today I checked in a change that defaults to opting-out of the troublesome disk-costing dialog box. It&#8217;s still present but by default will not be shown. If you&#8217;re using a stock dialog set, there are no changes you need to make. If you&#8217;ve built a customized dialog set, remove the WixUICostingPopupOptOut WiX variable definition from your dialog set fragment or you&#8217;re likely to get an error message at link time:</p>
<blockquote><p>The Windows Installer XML variable &#8216;WixUICostingPopupOptOut&#8217; is declared in more than one location.  Please remove one of the declarations.</p></blockquote>
<p>You can opt back in to the disk-costing dialog box by providing a value of 0:</p>
<blockquote><p>&lt;WixVariable Id=&#8221;WixUICostingPopupOptOut&#8221; Value=&#8221;0&#8243; /&gt;</p></blockquote>
<p>Look for this change in next Friday&#8217;s <a href="http://wix.sourceforge.net/releases/">builds</a> of WiX v3.5 and v3.6. (Any build more recent than yesterday&#8217;s v3.5.2208.0 and v3.6.1008.0 will have it.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2010/10/09/experimental-results-part-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Highlights of WiX v3.0.4917.0</title>
		<link>http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/</link>
		<comments>http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 02:29:19 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[WiX]]></category>
		<category><![CDATA[WiX highlights]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/</guid>
		<description><![CDATA[WiX v3.0.4917.0 was released on Saturday, 17-January-2009. You can download it from http://wix.sourceforge.net/releases/3.0.4917.0/. v3.0.4917.0 is the fourth post-beta build of WiX v3.0. There are 37 v3.0 bugs still open in the bug tracker. New features Rob and I added support &#8230; <a href="http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WiX v3.0.4917.0 was released on Saturday, 17-January-2009. You can download it from <a href="http://wix.sourceforge.net/releases/3.0.4917.0/">http://wix.sourceforge.net/releases/3.0.4917.0/</a>. </p>
<p>v3.0.4917.0 is the fourth post-beta build of WiX v3.0. There are <a href="https://sourceforge.net/tracker2/?limit=100&amp;func=&amp;group_id=105970&amp;atid=642714&amp;assignee=&amp;status=4&amp;category=&amp;artgroup=502142&amp;keyword=&amp;submitter=&amp;artifact_id=&amp;limitz=100&amp;assignee=&amp;status=1&amp;category=&amp;artgroup=502142&amp;submitter=&amp;keyword=&amp;artifact_id=&amp;submit=Filter&amp;limitz=100&amp;mass_category=&amp;mass_priority=&amp;mass_resolution=&amp;mass_assignee=&amp;mass_artgroup=&amp;mass_status=&amp;mass_cannedresponse=">37 v3.0 bugs still open</a> in the <a href="https://sourceforge.net/tracker2/?func=browse&amp;group_id=105970&amp;atid=642714">bug tracker</a>.</p>
<h2>New features</h2>
<ul>
<li><a href="http://robmensching.com/blog/">Rob</a> and <a href="http://www.joyofsetup.com/">I</a> added support for <a href="http://msdn.microsoft.com/en-us/library/dd408114(VS.85).aspx">MSI 5.0</a>. <a href="http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/">See the details here.</a> </li>
<li>Mike deprecated PerfCounter because PerformanceCounter is a superset. </li>
</ul>
<h2>Bug fixes</h2>
<ul>
<li>Mike fixed a bug in the MSBuild targets that broke localized builds in some conditions. </li>
<li>Eric fixed setup.exe&#8217;s handling of patches. </li>
<li><a href="http://blogs.msdn.com/heaths/">Heath</a> fixed 2320416 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2320416&amp;group_id=105970&amp;atid=642714">BinaryRef is not pulling in the Binary table row</a>]]. </li>
<li>Mike fixed 2373777 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2373777&amp;group_id=105970&amp;atid=642714">IIS creating additional COM application on reinstall</a>]]. </li>
<li>Mike fixed 2392718 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2392718&amp;group_id=105970&amp;atid=642714">Error unistalling WebApplication's COM+ object.</a>]]. </li>
<li>Rob fixed 2497976 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2497976&amp;group_id=105970&amp;atid=642714">ServiceInstall sends wrong attribute to PermissionEx</a>]]. </li>
<li>I fixed 2504320 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2504320&amp;group_id=105970&amp;atid=642714">Wix build fails when WixToolPath set to a relative directory</a>]]. </li>
<li><a href="http://blogs.msdn.com/astebner/">Aaron</a> fixed 2504909 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2504909&amp;group_id=105970&amp;atid=642714">Heat.exe may generate invalid IDs</a>]]. </li>
<li>Rob fixed 2511376 [[<a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2511376&amp;group_id=105970&amp;atid=642714">heat.exe 3.0.4909.0 error HEAT0001 when harvesting directory</a>]]. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSI v5.0 features in WiX v3.0</title>
		<link>http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/</link>
		<comments>http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 02:27:56 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[WiX]]></category>
		<category><![CDATA[WiX highlights]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/</guid>
		<description><![CDATA[MSI 5.0 ships in the recently released Windows 7 beta. When the Windows 7 beta SDK was released, Rob and I had the detailed information we needed to add support for those features in WiX. A week and a day &#8230; <a href="http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>MSI 5.0 ships in the recently released <a href="http://www.joyofsetup.com/2009/01/07/windows-7-server-2008-r2-betas-now-available-on-msdn/">Windows 7 beta</a>. When the <a href="http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/">Windows 7 beta SDK was released</a>, Rob and I had the <a href="http://msdn.microsoft.com/en-us/library/dd408114(VS.85).aspx">detailed information</a> we needed to add support for those features in WiX. A week and a day later, <a href="http://www.joyofsetup.com/2009/01/17/highlights-of-wix-v3049170/">WiX v3.0.4917.0</a> includes that support.</p>
<h2>What&#8217;s new?</h2>
<ul>
<li>In a long-awaited nod to modern UIs, MSI 5.0 supports a <a href="http://msdn.microsoft.com/en-us/library/dd407936(VS.85).aspx">hyperlink control</a>. In WiX authoring, the hyperlink control using &quot;Hyperlink&quot; as the <a href="http://wix.sourceforge.net/manual-wix3/wix_xsd_control.htm">Control/@Type attribute</a>:<br />
<blockquote>
<p>&lt;Control Id=&quot;MyHyperlinkControl1&quot; Height=&quot;20&quot; Width=&quot;100&quot; Type=&quot;Hyperlink&quot; X=&quot;5&quot; Y=&quot;5&quot;&gt;          <br />&#160; &lt;Text&gt;&lt;![CDATA[&lt;a href=&quot;<a href="http://www.joyofsetup.com/&quot;">http://www.joyofsetup.com/&quot;</a>&gt;Joy of Setup&lt;/a&gt;]]&gt;&lt;/Text&gt;           <br />&lt;/Control&gt;</p>
</blockquote>
</li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd408010(VS.85).aspx">MsiPrint control event</a> supports printing a rich-edit control, much like the WixUI support for printing the license agreement. </li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd408008(VS.85).aspx">MsiLaunchApp control event</a> launches an installed file, like the <a href="http://wix.sourceforge.net/manual-wix3/run_program_after_install.htm">WixShellExec custom action</a>. </li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd408039(VS.85).aspx">MsiShortcutProperty table</a> supports adding properties to shortcuts. WiX exposes this functionality with ShortcutProperty elements as children of the <a href="http://wix.sourceforge.net/manual-wix3/wix_xsd_shortcut.htm">Shortcut element</a>. </li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd408009(VS.85).aspx">MsiLockPermissionsEx table</a> supports a richer set of security settings, like WixUtilExtension&#8217;s <a href="http://wix.sourceforge.net/manual-wix3/util_xsd_permissionex.htm">PermissionEx element</a> and custom actions. WiX supports MsiLockPermissionsEx with a PermissionEx element in the WiX (not WixUtilExtension) namespace. <a href="http://msdn.microsoft.com/en-us/library/dd408009(VS.85).aspx">MsiLockPermissionsEx </a>and the new PermissionEx element use <a href="http://msdn.microsoft.com/en-us/library/aa379567%28VS.85%29.aspx">security descriptor definition language</a> (SDDL) to describe permissions. Both also support conditionally applying permissions. See <a href="http://msdn.microsoft.com/en-us/library/dd408053(VS.85).aspx">Securing Resources</a> for details. </li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/dd408038(VS.85).aspx">MsiServiceConfig</a> and <a href="http://msdn.microsoft.com/en-us/library/dd408037(VS.85).aspx">MsiServiceConfigFailureActions</a> tables add service-configuration options, like WixUtilExtension&#8217;s ServiceConfig element and custom actions. WiX supports the tables with a ServiceConfig element that, like the PermissionEx element, is in the WiX namespace. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2009/01/17/msi-v50-features-in-wix-v30/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Windows 7 beta SDK now available</title>
		<link>http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/</link>
		<comments>http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 07:57:35 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/</guid>
		<description><![CDATA[The Windows 7 beta SDK showed up on MSDN late Friday and is now available from the Microsoft download center for those without an MSDN subscription. Included in the new SDK is a new version of Orca and details about &#8230; <a href="http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The Windows 7 beta SDK showed up on MSDN late Friday and is now <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a91dc12a-fc94-4027-b67e-46bab7c5226c&amp;DisplayLang=en">available from the Microsoft download center</a> for those without an MSDN subscription. Included in the new SDK is a new version of Orca and details about the new features in MSI 5.0.</p>
<p>At the moment, the documentation doesn&#8217;t appear to be available in the <a href="http://msdn.microsoft.com/en-us/library/default.aspx">online MSDN Library</a>.</p>
<p>[via <a href="http://blogs.msdn.com/sandcastle/archive/2009/01/13/beta-release-of-microsoft-windows-sdk-for-windows-7-and-net-framework-3-5-sp1.aspx">Anand</a> and <a href="http://blogs.msdn.com/rflaming/archive/2009/01/12/beta-release-of-the-windows-sdk-for-windows-7-and-net-framework-3-5-sp1.aspx">Robert</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2009/01/13/windows-7-beta-sdk-now-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Paying for upgrades</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/</link>
		<comments>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 09:18:35 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/</guid>
		<description><![CDATA[No, this isn&#8217;t a post on the costs of proprietary software but an amplification/clarification to my previous post. On wix-users, there&#8217;s a thread on the pains of automating upgrades. If your product consists of a large number of files and &#8230; <a href="http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>No, this isn&#8217;t a post on the costs of proprietary software but an amplification/clarification to my <a href="http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/">previous post</a>. On <em>wix-users</em>, there&#8217;s a <a href="https://sourceforge.net/mailarchive/forum.php?thread_name=7A84109A2C011C47B536D8FDCA5E19B9E16B747C55%40mail.Wintellect.local&amp;forum_name=wix-users'">thread</a> on the pains of automating upgrades.</p>
<p>If your product consists of a large number of files and the file set changes regularly – files being added and removed during the product lifetime – it&#8217;s only natural to want to avoid the cost of hand-authoring setup changes to match. (A little over a year ago, I <a href="http://www.joyofsetup.com/2007/10/03/flight-simulator-x-acceleration-releases-to-manufacturing/">shipped a product with over 7000 files</a>, so I&#8217;m familiar with the pain and desire for automation.)</p>
<p>Unfortunately, our <a href="http://en.wikipedia.org/wiki/Frenemy">frenemy</a> the <a href="http://msdn.microsoft.com/en-us/library/aa372795.aspx">component</a> <a href="http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx">rules</a> makes such automation difficult. The closest we-the-WiX-team has gotten to a complete solution is to create components with one file each, which makes the component eligible to have its component GUID <a href="http://installing.blogspot.com/2006/09/automatically-generating-component.html">automatically generated</a> (using an asterisk in the <a href="http://wix.sourceforge.net/manual-wix3/wix_xsd_component.htm">Component element&#8217;s Guid attribute</a> value).</p>
<p>What doesn&#8217;t work is when files are removed. Windows Installer doesn&#8217;t let you remove components in a minor upgrade, so using one file per component doesn&#8217;t immediately solve the automation problem: Your automatically-generated minor upgrade will be missing a component, which is a <a href="http://blogs.msdn.com/heaths/archive/2006/01/23/516457.aspx">mortal component-rule sin</a>.</p>
<p>Nor can you avoid the problem by using multiple files per component because component rules say that components must be immutable: You can&#8217;t add or remove resources from a component.</p>
<p>So automating the creation of minor upgrades has additional costs:</p>
<ul>
<li>Additional tooling to try to support removing files without blatantly violating component rules.</li>
<li>Additional coding in your product to tolerate &#8220;obsolete&#8221; files without being able to remove them.</li>
</ul>
<p>For many types of apps, but especially Web apps with many content files, that&#8217;s a huge cost. Being able to ship minor-upgrade patches from an automated build might be a benefit worth the cost. It&#8217;s really a decision your team needs to make.</p>
<p>I&#8217;ll add that if you don&#8217;t anticipate shipping patches on a regular schedule, you might just automate the authoring of your RTM product and pay the price of manually tweaking your setup authoring when you need to ship a patch. Again, it&#8217;s a cost-benefit decision your team needs to think about.</p>
<h2>Cheap and easy</h2>
<p>If you don&#8217;t absolutely need to ship patches, you can avoid the costs of minor upgrades by simply using major upgrades. You can remove files without worrying about component-rule violations if you use an &#8220;early&#8221; scheduling of the <a href="http://msdn.microsoft.com/en-us/library/aa371197.aspx">RemoveExistingProducts</a> standard action – before or immediately after the <a href="http://msdn.microsoft.com/en-us/library/aa369535(VS.85).aspx">InstallInitialize action</a>.</p>
<p>The MSI SDK notes that scheduling RemoveExistingProducts early is &#8220;inefficient&#8221; because the files that are same between the two product versions are removed and then reinstalled. But that inefficiency is what lets you remove files and components. If you schedule RemoveExistingProducts immediately before or after <a href="http://msdn.microsoft.com/en-us/library/aa369505(VS.85).aspx">InstallFinalize</a>, MSI implements the major upgrade by installing the new version of the product &#8220;on top of&#8221; the previous version, upgrading files with newer versions, then removing the previous version. MSI increments the reference count of components in both packages during the installation of the newer version, then decrements it during the removal of the previous version. Component reference counting works only if component rules are followed, so it&#8217;s pretty much the same as minor upgrades.</p>
<p>If you have a large product, the size and install-time benefits of minor upgrade patches might be worth the development effort. Otherwise, major upgrades scheduled early are a great solution. Your call.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Neither more nor less</title>
		<link>http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/</link>
		<comments>http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 01:28:03 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/</guid>
		<description><![CDATA[&#8216;When I use a word,&#8217; Humpty Dumpty said, in a rather scornful tone,&#8217; it means just what I choose it to mean, neither more nor less.&#8217; &#8216;The question is,&#8217; said Alice, &#8216;whether you can make words mean so many different &#8230; <a href="http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8216;When <b>I</b> use a word,&#8217; Humpty Dumpty said, in a rather scornful tone,&#8217; it means just what I choose it to mean, neither more nor less.&#8217;</p>
<p>&#8216;The question is,&#8217; said Alice, &#8216;whether you <i>can</i> make words mean so many different things.&#8217;</p>
<p>&#8216;The question is,&#8217; said Humpty Dumpty, &#8216;which is to be master &#8211; that&#8217;s all.&#8217; </p>
<p>&#8211;<a href="http://en.wikipedia.org/wiki/Alice%27s_Adventures_in_Wonderland">Alice&#8217;s Adventures in Wonderland</a> and brought to mind by almost anybody reading SDK documentation for any length of time</p>
</blockquote>
<p>Windows Installer has three ways of upgrading products from one version to another:</p>
<ul>
<li>Major upgrades </li>
<li>Minor upgrades </li>
<li>Small updates </li>
</ul>
<p>There are two common problems we run into when discussing upgrades given size-related terms to describe upgrades.</p>
<h2>Version numbers</h2>
<p><em>Major</em> and <em>minor</em> are also commonly used to refer to particular elements in a version number (major.minor.build.patchlevel being most common). </p>
<p>But major upgrades can upgrade any product version number to any other version number, regardless of which parts of the version number change. For example, the WiX installers are always major upgrades for every 3.0.xxxx version; only the <em>build</em> portion of the version number changes with each weekly build. And the WiX v3.0 installers don&#8217;t do major upgrades down to WiX v2; we intentionally designed the installers to be able to live &quot;side-by-side&quot; on the same system to help migrating from WiX v2 to v3. </p>
<p>Minor upgrades, on the other hand, are usually used to deliver service packs; they must change some part of the product version but <em>can&#8217;t</em> change the major part of the product version (at least according to PatchWiz.dll error ERROR_PCW_INVALID_MAJOR_VERSION).</p>
<p>Small updates cannot change the product version at all.</p>
<h2>Size matters not</h2>
<p><em>Major</em>, <em>minor</em>, and <em>small</em> also bring to mind size or breadth of a particular upgrade. To an extent, that&#8217;s true: Small updates tend to be for single-purpose &quot;hotfix&quot; types of fixes. Minor upgrades can update many files but can make only limited &quot;structural&quot; changes such as adding features and components; they can&#8217;t be used to remove components. </p>
<p>Major upgrades aren&#8217;t so limited: They can change anything in a product, but also support as few changes as a small update. So even if you&#8217;re changing only a few files, you can still use major upgrades. Think of <em>major</em> as an upper limit on the set of changes, not the lower limit on the type of upgrade you need.</p>
<p>Major upgrades also have the advantage of built-in support in Windows Installer. Using <a href="http://wix.sourceforge.net/manual-wix3/wix_xsd_upgrade.htm">Upgrade</a> and <a href="http://wix.sourceforge.net/manual-wix3/wix_xsd_upgradeversion.htm">UpgradeVersion</a> elements, you can use a &quot;naked&quot; .msi package to install a product for the first time or by major-upgrading a prior version of the product. Doing the same thing with a minor upgrade requires a bootstrapper executable or extra work to set the <a href="REINSTALL">REINSTALL</a> and <a href="http://msdn.microsoft.com/en-us/library/aa371182(VS.85).aspx">REINSTALLMODE</a> properties appropriately.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2008/12/29/neither-more-nor-less/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 7 MSI session at PDC</title>
		<link>http://www.joyofsetup.com/2008/09/26/windows-7-msi-session-at-pdc/</link>
		<comments>http://www.joyofsetup.com/2008/09/26/windows-7-msi-session-at-pdc/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:01:10 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2008/09/26/windows-7-msi-session-at-pdc/</guid>
		<description><![CDATA[New/old lead program manager Tyler Robinson has a session at PDC to discuss the new features in Windows Installer and ClickOnce in Windows 7: If you are a developer involved in the creation of application deployment packages using Windows Installer &#8230; <a href="http://www.joyofsetup.com/2008/09/26/windows-7-msi-session-at-pdc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/windows_installer_team/archive/2008/03/07/windows-installer-4-5-beta-2-coming-soon-and-a-chat-too.aspx">New/old lead program manager Tyler Robinson</a> has a session at PDC to discuss the new features in Windows Installer and ClickOnce in Windows 7:</p>
<blockquote><p>If you are a developer involved in the creation of application deployment packages using Windows Installer (MSI) or ClickOnce, this session is for you. Learn how you can take advantage of new features in Windows 7 to shorten application installation times, reduce UAC prompts, write less custom code, take less time to write installations for complex packages, and much more!</p>
</blockquote>
<p>Not a lot of detail, but some potentially interesting tidbits. To see the information available on the session:</p>
<ol>
<li>Go to the <a href="https://sessions.microsoftpdc.com/public/sessions.aspx">PDC sessions page</a>.</li>
<li>Click on <strong>Windows 7</strong>.</li>
<li>Scroll to the bottom of the list; it&#8217;s currently the sixth session from the bottom.</li>
</ol>
<p>Why am I not linking directly to the session? AJAX and Web 2.0, baby. <a href="http://blogs.msdn.com/oldnewthing/archive/2008/09/25/8965130.aspx">Not even Raymond Chen can make it happen.</a>&lt;sigh&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2008/09/26/windows-7-msi-session-at-pdc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hint: Be generous with upgrade codes</title>
		<link>http://www.joyofsetup.com/2008/09/07/hint-be-generous-with-upgrade-codes/</link>
		<comments>http://www.joyofsetup.com/2008/09/07/hint-be-generous-with-upgrade-codes/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 00:33:45 +0000</pubDate>
		<dc:creator>Bob Arnson</dc:creator>
				<category><![CDATA[Windows Installer]]></category>
		<category><![CDATA[bad practices]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://www.joyofsetup.com/2008/09/07/hint-be-generous-with-upgrade-codes/</guid>
		<description><![CDATA[Major upgrades work across products by associating them with a single upgrade code: Version 1.0 of a product has a different product code than version 2.0 but both share the same upgrade code. The FindRelatedProducts action and MsiEnumRelatedProducts function find &#8230; <a href="http://www.joyofsetup.com/2008/09/07/hint-be-generous-with-upgrade-codes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Major upgrades work across products by associating them with a single upgrade code: Version 1.0 of a product has a different product code than version 2.0 but both share the same upgrade code. The <a href="http://msdn.microsoft.com/en-us/library/aa368600(VS.85).aspx">FindRelatedProducts action</a> and <a href="http://msdn.microsoft.com/en-us/library/aa370103(VS.85).aspx">MsiEnumRelatedProducts function</a> find any products on the system with a particular upgrade code. The <a href="http://msdn.microsoft.com/en-us/library/aa371197(VS.85).aspx">RemoveExistingProducts action</a> then uninstalls the (usually older) products as part of the major upgrade cycle.</p>
<p>Note that FindRelatedProducts and MsiEnumRelatedProducts explicitly support finding multiple products installed on the system simultaneously. MSI doesn&#8217;t try to force you to use the same upgrade code only for products that are upgraded by major upgrades. That means it&#8217;s possible to use the same upgrade code for products that aren&#8217;t major upgrades for each other.</p>
<p>However, the <a href="http://msdn.microsoft.com/en-us/library/aa372379(VS.85).aspx">Upgrade table</a> supports only version and language as ways of narrowing down the products it finds. So if you use the same upgrade code for multiple products that can be installed simultaneously, FindRelatedProducts doesn&#8217;t have a way to filter out the ones you don&#8217;t want removed in a major upgrade.</p>
<p>You can use a custom action to remove product codes from the property specified by the UpgradeVersion/@Property attribute. Just schedule it to run after FindRelatedProducts. The cost is that you have to maintain by hand any such product codes and carry them from version to version. </p>
<p>The Upgrade table and FindRelatedProducts action let you search on multiple upgrade codes in a single product. So it&#8217;s always safe to use <em>more</em> upgrade codes if you think you might support having products side-by-side in the future &#8212; just use multiple Upgrade elements to detect and uninstall them via major upgrade.</p>
<p>In short, if you have products are <em>never</em> going to be installed at the same time, you can safely use the same upgrade code. But if you have products that might need to be installed simultaneously, give them separate upgrade codes. (Upgrade code GUIDs are cheap when you buy them in quantity from <a href="http://msdn.microsoft.com/en-us/library/ms241442(VS.80).aspx">reputable online retailers</a>.) And always test your servicing strategy before you release a product: Some things can&#8217;t be fixed in a patch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joyofsetup.com/2008/09/07/hint-be-generous-with-upgrade-codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

