<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Paying for upgrades</title>
	<atom:link href="http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/</link>
	<description>Bob Arnson's blog about setup and servicing</description>
	<lastBuildDate>Fri, 12 Mar 2010 00:54:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Joy of Setup &#8250; Update for Virtual PC 2007 SP1 available</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7380</link>
		<dc:creator>Joy of Setup &#8250; Update for Virtual PC 2007 SP1 available</dc:creator>
		<pubDate>Fri, 27 Feb 2009 10:16:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7380</guid>
		<description>[...] so I really don&#8217;t understand why the updates weren&#8217;t delivered as customer-friendly major upgrades.   This was written by Bob Arnson. Posted on Friday, February 27, 2009, at 02:16. Filed under [...]</description>
		<content:encoded><![CDATA[<p>[...] so I really don&#8217;t understand why the updates weren&#8217;t delivered as customer-friendly major upgrades.   This was written by Bob Arnson. Posted on Friday, February 27, 2009, at 02:16. Filed under [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7303</link>
		<dc:creator>Erik</dc:creator>
		<pubDate>Wed, 14 Jan 2009 05:03:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7303</guid>
		<description>I&#039;ve already done a system like what Daniel suggests with some of the ideas Tony brings up.  

Goodness is it a pain in the butt!  We skirted so many of the rules and hacked up the MSI to such an extent that I feel shame.  Dead transitive components add so much cruft to the MSI.  And if the install has &gt; 40k files, the thing is ungodly slow.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve already done a system like what Daniel suggests with some of the ideas Tony brings up.  </p>
<p>Goodness is it a pain in the butt!  We skirted so many of the rules and hacked up the MSI to such an extent that I feel shame.  Dead transitive components add so much cruft to the MSI.  And if the install has &gt; 40k files, the thing is ungodly slow.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Juricic</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7279</link>
		<dc:creator>Tony Juricic</dc:creator>
		<pubDate>Wed, 31 Dec 2008 16:25:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7279</guid>
		<description>Transitive components (to reevaluate the condition and remove the file) and one file per component is the solution that I am going for too.

My &#039;scripts&#039; are C# console apps that use LINQ to XML on *.wxs and *.wxi and produce patches for each build. All is tied up by one batch file invoking msbuild.

The most tedious thing for me is keeping a good, complete account of what is going on, logging the changes and applying them correctly to *.wxs or *.wxi. 

We also allow to do the things that normally break the component rules, like creating a new folder. This is done in code, in CA DLL, so we don&#039;t break the rule &#039;officially&#039; and still can create a minor update patch.</description>
		<content:encoded><![CDATA[<p>Transitive components (to reevaluate the condition and remove the file) and one file per component is the solution that I am going for too.</p>
<p>My &#8217;scripts&#8217; are C# console apps that use LINQ to XML on *.wxs and *.wxi and produce patches for each build. All is tied up by one batch file invoking msbuild.</p>
<p>The most tedious thing for me is keeping a good, complete account of what is going on, logging the changes and applying them correctly to *.wxs or *.wxi. </p>
<p>We also allow to do the things that normally break the component rules, like creating a new folder. This is done in code, in CA DLL, so we don&#8217;t break the rule &#8216;officially&#8217; and still can create a minor update patch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Lee</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7277</link>
		<dc:creator>Daniel Lee</dc:creator>
		<pubDate>Tue, 30 Dec 2008 21:23:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7277</guid>
		<description>There are some other solutions to defunct files and components in an upgrade scenario. one of the tricks we have used is to add a condition to a component that always evaluates to false, e.g., &quot;1&quot;=&quot;0&quot; and make sure the attribute to reevaluate conditions is set. This will have the effect of &#039;deleting&#039; the files from the user&#039;s computer.

We then create a new component with the changed files and a new component GUID since I can create new components in a minor upgrade scenario.

This scenario above is not practical if you have a single component packed with hundreds of files and only one file has changed though.

Currently we are working on a system that will handle automation for patching. We do have patches built every night and I have perl scripts that evaluate the patch validation logs for errors and uses the errors to add entries to the Remove Files and Remove Registry Tables. 

We still have a ways to go to have a fully automated system and it is a lot of work, but I think in the end it will be worth the effort.</description>
		<content:encoded><![CDATA[<p>There are some other solutions to defunct files and components in an upgrade scenario. one of the tricks we have used is to add a condition to a component that always evaluates to false, e.g., &#8220;1&#8243;=&#8221;0&#8243; and make sure the attribute to reevaluate conditions is set. This will have the effect of &#8216;deleting&#8217; the files from the user&#8217;s computer.</p>
<p>We then create a new component with the changed files and a new component GUID since I can create new components in a minor upgrade scenario.</p>
<p>This scenario above is not practical if you have a single component packed with hundreds of files and only one file has changed though.</p>
<p>Currently we are working on a system that will handle automation for patching. We do have patches built every night and I have perl scripts that evaluate the patch validation logs for errors and uses the errors to add entries to the Remove Files and Remove Registry Tables. </p>
<p>We still have a ways to go to have a fully automated system and it is a lot of work, but I think in the end it will be worth the effort.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Neil Sleightholm</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7276</link>
		<dc:creator>Neil Sleightholm</dc:creator>
		<pubDate>Tue, 30 Dec 2008 16:31:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7276</guid>
		<description>Thanks for a very useful post. I&#039;ll stick to major upgrades only with RemoveExistingProducts before InstallInitialize!</description>
		<content:encoded><![CDATA[<p>Thanks for a very useful post. I&#8217;ll stick to major upgrades only with RemoveExistingProducts before InstallInitialize!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eric</title>
		<link>http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/comment-page-1/#comment-7275</link>
		<dc:creator>Eric</dc:creator>
		<pubDate>Tue, 30 Dec 2008 12:22:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/#comment-7275</guid>
		<description>I can&#039;t help but wonder whether this entire issue is caused by questionable design choices in Windows Installer. Windows Installer fails in certain situations to deal correctly with component reference counting, patch files are difficult to do correctly and on top of that, it&#039;s ungodly slow.</description>
		<content:encoded><![CDATA[<p>I can&#8217;t help but wonder whether this entire issue is caused by questionable design choices in Windows Installer. Windows Installer fails in certain situations to deal correctly with component reference counting, patch files are difficult to do correctly and on top of that, it&#8217;s ungodly slow.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
