<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Windows Installer Team Blog : Troubleshooting</title><link>http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx</link><description>Tags: Troubleshooting</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Growing Windows Installer Experts through Troubleshooting</title><link>http://blogs.msdn.com/windows_installer_team/archive/2008/01/19/growing-windows-installer-experts-through-troubleshooting.aspx</link><pubDate>Sat, 19 Jan 2008 17:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7161786</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/7161786.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=7161786</wfw:commentRss><description>&lt;P&gt;Windows Installer expert &lt;A id=ctl00___ctl00___ctl01___Comments___Comments_ctl01_NameLink title="Dennis Bareis" href="http://makemsi.dennisbareis.com/" target=_blank rel=nofollow&gt;&lt;FONT color=#003399&gt;Dennis Bareis&lt;/FONT&gt;&lt;/A&gt; responded to a previous post, &lt;A id=bp___ctl00___RecentPosts___postlist___EntryItems_ctl00_PostTitle href="http://blogs.msdn.com/windows_installer_team/archive/2008/01/18/request-for-suggestions-for-updating-the-1603-kb-article.aspx"&gt;&lt;FONT color=#003399&gt;Request for suggestions for updating the 1603 KB article&lt;/FONT&gt;&lt;/A&gt;.&amp;nbsp; As I worked through his points, the problem of "Growing Windows Installer Experts through Troubleshooting" came into focus.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Growing Windows Installer Experts through Troubleshooting&lt;BR&gt;&lt;/STRONG&gt;One of the challenges faced by the Windows Installer community is that there are not enough experts with the capacity to go all the way through the stack to the underlying Win32 behavior.&lt;/P&gt;
&lt;P&gt;As with most "grow expertise" problems, there are a few high traffic areas in which one has the chance offer a novice the opportunity to build their expertise.&lt;/P&gt;
&lt;P&gt;Once one identifies the high traffic areas, one should go to where the traffic is.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Top Three High Traffic Areas for Novices&lt;BR&gt;&lt;/STRONG&gt;The top three in my mind are: tools environment, troubleshooting, and design (in order of priority).&lt;/P&gt;
&lt;P&gt;The primary instance to grow expertise is where a user of a packaging tool has reached the limit of the tools design and yet still needs to do more.&amp;nbsp; This opportunity to evolve expertise is generally lost to the Windows Installer because our various tools vendor partners each own their Integrated Development Environment (as they should ;^).&lt;/P&gt;
&lt;P&gt;The secondary instance to grow expertise is when there are errors in the underlying experience and one needs to work backward from the low level data into the friendlier higher level constructs.&lt;/P&gt;
&lt;P&gt;The tertiary instance to grow expertise is when novices show interest in design.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;When I was little...&lt;BR&gt;&lt;/STRONG&gt;My goal in updating the KB would be to provide a bit more guidance to the novice that needs (or perhaps even wants) to grow in the direction of becoming an expert.&lt;/P&gt;
&lt;P&gt;One of the challenges after reaching the expert level is trying to remember the road traveled so that one might draw a map for those who come after.&lt;/P&gt;
&lt;P&gt;It's been so long since I was a novice, I thought it wise to ask for suggestions on how others guide folks on building their Windows Installer expertise through troubleshooting.&lt;/P&gt;
&lt;P&gt;Thanks again for the valuable feedback.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; COLOR: #969696; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;[Author: Robert Flaming]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm" mce_href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;SPAN style="COLOR: #003399; mso-bidi-font-size: 11.0pt"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7161786" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Request for suggestions for updating the 1603 KB article?</title><link>http://blogs.msdn.com/windows_installer_team/archive/2008/01/18/request-for-suggestions-for-updating-the-1603-kb-article.aspx</link><pubDate>Fri, 18 Jan 2008 23:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7152700</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/7152700.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=7152700</wfw:commentRss><description>&lt;P&gt;Feedback on our existing &lt;A class="" href="http://support.microsoft.com/kb/834484/en-us" mce_href="http://support.microsoft.com/kb/834484/en-us"&gt;Knowledge Base article for the error 1603&lt;/A&gt; is that 'it is not very useful.'&lt;/P&gt;
&lt;P&gt;My first thought to update the KB would be to go over the troubleshooting techniques such as verbose logging and then how to find and read the errors in the log.&lt;/P&gt;
&lt;P&gt;Before proceeding to writing, I thought I'd check-in with the Windows Installer community via this blog.&lt;/P&gt;
&lt;P&gt;Are there things besides troubleshooting info you would recommend get covered in&amp;nbsp;the 1603&amp;nbsp;KB?&lt;/P&gt;
&lt;P&gt;Thanks for your consideration.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; COLOR: #969696; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;[Author: Robert Flaming]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm" mce_href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;SPAN style="COLOR: #003399; mso-bidi-font-size: 11.0pt"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7152700" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Frequently+Asked+Questions/default.aspx">Frequently Asked Questions</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Tips to find Windows Installer specific product support</title><link>http://blogs.msdn.com/windows_installer_team/archive/2008/01/03/tips-to-find-windows-installer-specific-product-support.aspx</link><pubDate>Thu, 03 Jan 2008 23:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6971774</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/6971774.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=6971774</wfw:commentRss><description>&lt;P&gt;Customers have mentioned having trouble finding Windows Installer support when they try to navigate the maze of Microsoft support offerings.&lt;/P&gt;
&lt;P&gt;If you too need to find Windows Installer specific product support, the support staff dedicated to Windows Installer can be reached by&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;For non-Premier Service accounts, see the &lt;A class="" href="http://support.microsoft.com/default.aspx?scid=fh;EN-US;OfferProPhone" mce_href="http://support.microsoft.com/default.aspx?scid=fh;EN-US;OfferProPhone"&gt;Professional Support&lt;/A&gt; site&lt;/LI&gt;
&lt;OL type=a&gt;
&lt;LI&gt;Choose an option from the "Developer" row&lt;/LI&gt;
&lt;LI&gt;Mention key words "Windows Installer", "MSI", and "Development"&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;For Premier Service accounts, contact your Technical Account Manager&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Windows Installer product support services are provided by a dedicated team of specialists inside the larger Microsoft support organization.&lt;/P&gt;
&lt;P&gt;If you stump these specialists with a difficult or rare issue, they have an escalation path into the Windows product group.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; COLOR: #969696; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;[Author: Robert Flaming]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-bidi-language: AR-SA"&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm" mce_href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;SPAN style="COLOR: #003399; mso-bidi-font-size: 11.0pt"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6971774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Frequently+Asked+Questions/default.aspx">Frequently Asked Questions</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>How to Interpret Windows Installer Logs</title><link>http://blogs.msdn.com/windows_installer_team/archive/2007/04/03/how-to-interpret-windows-installer-logs.aspx</link><pubDate>Tue, 03 Apr 2007 17:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2013978</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/2013978.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=2013978</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;&amp;nbsp;&lt;FONT color=#000000&gt;If you have a problem with the Windows Installer or an MSI package you're installing, it's a sure bet that you will be told by some smart person to "enable logging". &lt;BR&gt;&lt;BR&gt;That's great advice, except ... what do you do with the log once you get it?&amp;nbsp; Well, find out by popping over to my blog, where I walk through the contents of a typical Installer Log:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;&lt;FONT color=#000000&gt;&lt;A class="" href="http://blogs.technet.com/richard_macdonald/archive/2007/04/02/How-to-Interpret-Windows-Installer-Logs.aspx" mce_href="http://blogs.technet.com/richard_macdonald/archive/2007/04/02/How-to-Interpret-Windows-Installer-Logs.aspx"&gt;How to Interpret Windows Installer Logs&lt;/A&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;[Author: Richard Macdonald]&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 20pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 12.0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 7.5pt"&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;SPAN style="COLOR: #003399; mso-bidi-font-size: 11.0pt"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 20pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-language: EN-GB; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-size: 12.0pt"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2013978" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Arbitrary labels used as Primary keys must not be changed between versions</title><link>http://blogs.msdn.com/windows_installer_team/archive/2007/03/07/arbitrary-labels-used-as-primary-keys-must-not-be-changed-between-versions.aspx</link><pubDate>Wed, 07 Mar 2007 21:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1830132</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/1830132.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=1830132</wfw:commentRss><description>&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT face=Cambria color=#365f91 size=5&gt;Summary&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Msi Editing tools that write auto generated references inside installer tables may cause unnecessary content to be included inside a patch.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;‘Patching’ components with unchanged content may cause them to be uninstalled when the patch is removed thereby breaking the original application.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;EM&gt;&lt;FONT size=5&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;&lt;SPAN class=MsoIntenseEmphasis&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;Scenario&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=MsoIntenseEmphasis&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;“I create a small patch for my product.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;When I selectively uninstall the patch my original product is broken.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The trouble is I’m using Msi 3.x and this isn’t supposed to happen.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Doesn’t Msi 3.x ‘cache’ whatever I patch so I can just roll it back when I uninstall?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I have followed all the rules to the letter but can’t see where things are going wrong?”&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT size=5&gt;&lt;FONT face=Cambria&gt;&lt;FONT color=#365f91&gt;&lt;SPAN style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold"&gt;This&lt;/SPAN&gt; &lt;/FONT&gt;&lt;SPAN class=MsoIntenseEmphasis&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;&lt;FONT color=#4f81bd&gt;Is How &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT color=#365f91&gt;&lt;SPAN style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold"&gt;I&lt;/SPAN&gt; &lt;/FONT&gt;&lt;SPAN class=MsoIntenseEmphasis&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;&lt;FONT color=#4f81bd&gt;Can Reproduce This Behaviour&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I create an installation msi for my simple single file application msiExplorer.exe.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There is nothing untoward about this installation.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The file goes in Program Files\msiExplorer and puts a shortcut on the desktop.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The installation also creates a single registry key HKLM\Software\msiExplorer with value Text set to “A”.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;It installs. It works.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Here’s the registry table:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=egkey1 style="WIDTH: 709px; HEIGHT: 184px" height=184 alt=egkey1 src="http://msidev.members.winisp.net/image001.png" width=709 align=middle mce_src="http://msidev.members.winisp.net/image001.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Next, I create a new ‘upgraded’ version of this product.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The only thing I change is the &lt;U&gt;label&lt;/U&gt; in the registry column of the registry table. (Why would I want to do that!? – well just bear with me and I’ll explain below).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I change the label to “RegKey2”.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=regkey2 style="WIDTH: 709px; HEIGHT: 184px" height=184 alt=regkey2 src="http://msidev.members.winisp.net/image002.png" width=709 align=middle mce_src="http://msidev.members.winisp.net/image002.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Now I go through the patch creation process by duly creating a PCP file.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In the PCP I specify the old ‘RTM’ msi and the new ‘updated’ msi – the usual routine.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When I execute MsiMsp.exe it works.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;No errors reported.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I can even load the original RTM msi database into Orca and overlay it with my new msp.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It confirms that the registry table has been modified and shows me what is now included in the patch.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=Regkey1Regkey2 style="WIDTH: 685px; HEIGHT: 212px" height=212 alt=Regkey1Regkey2 src="http://msidev.members.winisp.net/image003.png" width=685 align=middle mce_src="http://msidev.members.winisp.net/image003.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Notice how the actual Registry key, value and data are the same.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Only the Registry column has changed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Ok, I install RTM.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It runs without problem; the registry key is duly created.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I apply the patch (msiexec /p msiExplorer.msp).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It installs, it runs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Registry key looks the same – well it would wouldn’t it?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;At this stage it’s difficult to tell who was responsible for writing that registry value – the RTM install or the subsequent patch.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;IMG title=regdumpTextA style="WIDTH: 723px; HEIGHT: 243px" height=243 alt=regdumpTextA src="http://msidev.members.winisp.net/image004.png" width=723 align=middle mce_src="http://msidev.members.winisp.net/image004.png"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;However I know the patch has been successfully applied because when I look in Add\Remove programs, there is my app and the patch correctly listed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=arpPatch1 style="WIDTH: 730px; HEIGHT: 167px" height=167 alt=arpPatch1 src="http://msidev.members.winisp.net/image005.png" width=730 align=middle mce_src="http://msidev.members.winisp.net/image005.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;So everything looks good.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Unfortunately the trouble starts when I decide to selectively remove MsiExplorer_Patch1 (msiexec /i msiExplorer.msi MSIPATCHREMOVE=msiexplorer.msp).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The patch uninstall executes successfully, Add\Remove programs shows it has been removed and I think I’m ok.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=arpPatch1Removed style="WIDTH: 730px; HEIGHT: 167px" height=167 alt=arpPatch1Removed src="http://msidev.members.winisp.net/image006.png" width=730 align=middle mce_src="http://msidev.members.winisp.net/image006.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;But when I look in the registry.......&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;IMG title=regdumpTextAgone style="WIDTH: 723px; HEIGHT: 243px" height=243 alt=regdumpTextAgone src="http://msidev.members.winisp.net/image007.png" width=723 align=middle mce_src="http://msidev.members.winisp.net/image007.png"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .........my registry key has gone.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So now you can imagine when I run my app – if it depended on this key – it’s going to fail.&lt;/FONT&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT face=Cambria color=#365f91 size=5&gt;Why does that happen?&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;FONT face=Calibri size=3&gt;The key aspect of the scenario is that the registry key with a new label ‘looks’ like a new registry resource added by the patch.&amp;nbsp; When a patch is removed, the new product is restored to its view minus the patch.&amp;nbsp; Additionally, the Installer processes the patch being removed for any resources that it added.&amp;nbsp; It then schedules removal for those resources.&amp;nbsp; Therefore, while the key with label RegKey1 became active (the verbose log file shows it being written).........&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-add-space: auto" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=verboseLogAdded style="WIDTH: 807px; HEIGHT: 339px" height=339 alt=verboseLogAdded src="http://msidev.members.winisp.net/image008.png" width=807 align=middle mce_src="http://msidev.members.winisp.net/image008.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36pt; mso-add-space: auto"&gt;&lt;FONT face=Calibri size=3&gt;........... it was later deleted per label RegKey2 as part of the added resource cleanup (the last portion of the verbose log file before the end opcode).&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-add-space: auto" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0cm 0cm 10pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=verboseLog_Removed style="WIDTH: 807px; HEIGHT: 339px" height=339 alt=verboseLog_Removed src="http://msidev.members.winisp.net/image009.png" width=807 align=middle mce_src="http://msidev.members.winisp.net/image009.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT face=Cambria color=#365f91 size=5&gt;So How Could You Unknowingly Get Into This Situation?&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I’m using an ‘industrial strength household name Msi Editing tool’ (ISHNMET).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It’s a very good product.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It has a nice feature which will read a COM Server file and automatically extract the COM registration information and populate the tables.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;One of these tables is the registry table.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It therefore populates the registry column with arbitrary labels Registry1, Registry2...etc.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Here’s a mock up of how it might look:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;IMG title=mockupBefore style="WIDTH: 867px; HEIGHT: 213px" height=213 alt=mockupBefore src="http://msidev.members.winisp.net/image010.png" width=867 align=middle mce_src="http://msidev.members.winisp.net/image010.png"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I have to rebuild my msi package every day and have automated the process.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The developers submit their updated files and the tables are built by script.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When the msi is built by the ISHNMET it does its trick of automatically extracting the COM information.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;If the developer has built some extra COM functionality into a dll the entries are inserted mid table bumping all the lower rows down.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The naming algorithm just re-labels all the rows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;In this example Registry4 gets bumped down a row and re-labelled as Registry5&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=mockupAfter style="WIDTH: 813px; HEIGHT: 219px" height=219 alt=mockupAfter src="http://msidev.members.winisp.net/image011.png" width=813 align=middle mce_src="http://msidev.members.winisp.net/image011.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Now when we go through our patch creation process we correctly pick up that MsiExplorer.exe component has changed but inadvertently include component ‘SomeComponent’&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;because the label changed!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Now we are going to deliver a patch which includes the problem discussed above.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;To be fair the very latest versions of ISHNMET try to minimise this scenario.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However you might for example delete a registry entry and then change your mind, re-create it using the GUI and have it reappear in the registry table with a brand new label.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So it probably pays to be aware of the dangers of arbitrary labels.&lt;/FONT&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT face=Cambria color=#365f91 size=5&gt;Does this happen anywhere else?&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Exactly the same issue applies to the file table.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If the ISHNMET uses arbitrary labels for the files it is adding to the file table then they are subject to the same vulnerability.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Where the label in the file table is used as the keypath in the component, it is automatically changed at both reference points when re-labelling occurs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;From the ISHNMET point of view this keeps the referential integrity between Component and File nice and tidy.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;From our point of view though, this will be picked up by MsiMsp.exe.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You could finish up attempting to patch a file with an identical copy.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Here is what this looks like with my simple example:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Modify the File column of the file table (Was msiExplorer.exe, now msiExplorer1.exe)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=FileExample1 style="WIDTH: 872px; HEIGHT: 200px" height=200 alt=FileExample1 src="http://msidev.members.winisp.net/image012.png" width=872 align=middle mce_src="http://msidev.members.winisp.net/image012.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;... and modify the keypath reference in the component table....&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=fileExample2 style="WIDTH: 872px; HEIGHT: 200px" height=200 alt=fileExample2 src="http://msidev.members.winisp.net/image013.png" width=872 align=middle mce_src="http://msidev.members.winisp.net/image013.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Create the patch and just to confirm it, overlay the RTM msi with the msp.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;U&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;U&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;IMG title=fileExample3 style="WIDTH: 872px; HEIGHT: 196px" height=196 alt=fileExample3 src="http://msidev.members.winisp.net/image014.png" width=872 align=middle mce_src="http://msidev.members.winisp.net/image014.png"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Install RTM.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Install the patch.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Use Add\Remove programs to confirm the patch is registered&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;U&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;IMG title=fileExample4 style="WIDTH: 735px; HEIGHT: 163px" height=163 alt=fileExample4 src="http://msidev.members.winisp.net/image015.png" width=735 align=middle mce_src="http://msidev.members.winisp.net/image015.png"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;You might even inspect the patch cache and notice that &lt;U&gt;no&lt;/U&gt; copy of msiExplorer.exe has been saved.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;U&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=fileExample5 style="WIDTH: 777px; HEIGHT: 334px" height=334 alt=fileExample5 src="http://msidev.members.winisp.net/image016.png" width=777 align=middle mce_src="http://msidev.members.winisp.net/image016.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Now selectively uninstall the patch and the original msiExplorer.exe (The one in Program Files\msiExplorer) has disappeared.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Try to run the shortcut and if you’re lucky the executable will be restored via install-on-demand resilience or in my case, just to prove the point, I hid the source msi so that I could see the install-on-demand dialog.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align=center&gt;&lt;U&gt;&lt;SPAN style="mso-fareast-language: EN-GB; mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title=fileExmple6 style="WIDTH: 404px; HEIGHT: 230px" height=230 alt=fileExmple6 src="http://msidev.members.winisp.net/image017.png" width=404 align=middle mce_src="http://msidev.members.winisp.net/image017.png"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The app is broken.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"&gt;&lt;FONT face=Calibri size=3&gt;This same explanation above works for the File as well – and it should be noted that you’d need to maintain the same filekey for binary delta patching to work (just look at the Patch table and you’ll know why by reviewing the primary key columns for that table)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0cm 0cm 10pt; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 24pt 0cm 0pt"&gt;&lt;FONT face=Cambria color=#365f91 size=5&gt;Here’s the Message&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0cm 0cm 10pt; mso-add-space: auto"&gt;&lt;FONT face=Calibri size=3&gt;The Installer’s format is a relational database.&amp;nbsp; Identity is expressed by the primary key – which is why it is so crucial.&amp;nbsp; An item is found in the database by searching for its primary key. That’s how transforms can know which data to modify (efficiently) and how Patchwiz can determine what has changed.&amp;nbsp; It’s imperative that the primary keys are not changed between versions of the package.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 16pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-fareast-language: EN-GB"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; tab-stops: 138.0pt"&gt;&lt;SPAN lang=EN style="COLOR: #969696; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 7.5pt; mso-ansi-language: EN; mso-fareast-language: EN-GB"&gt;[Author: Robin Drake]&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 20pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN; mso-fareast-language: EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 7.5pt; mso-ansi-language: EN; mso-fareast-language: EN-GB"&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;SPAN style="COLOR: #003399; mso-bidi-font-size: 11.0pt"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 20pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN; mso-fareast-language: EN-GB"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;SPAN style="FONT-SIZE: 18pt; LINE-HEIGHT: 115%; mso-bidi-font-size: 11.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1830132" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Best+Practice+Guidelines/default.aspx">Best Practice Guidelines</category></item><item><title>Windows Installer Appears Every Time a Program is Started</title><link>http://blogs.msdn.com/windows_installer_team/archive/2006/02/05/525213.aspx</link><pubDate>Sun, 05 Feb 2006 21:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:525213</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/525213.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=525213</wfw:commentRss><description>&lt;h3&gt;Question&lt;/h3&gt;
&lt;p&gt;OS: Windows XP Home SP2 with Automatic updates every day at 3AM; Machine: Toshiba Satellite M35X-S311; 80% of hard drive free. &lt;/p&gt;
&lt;p&gt;My trial version of Office 2003 expired 1/31/06 (no warning messages received prior). I couldn't access Control Panel (system32/CoPM.cpl error). No System Restore points prior to 1/31/06.&lt;/p&gt;
&lt;p&gt;Ever since 1/31/06, windows installer pops up on every application (explorer, print, office). "Preparing to Install just hangs there for a couple of minutes -- for everything.&lt;/p&gt;
&lt;p&gt;Spyware, adware and malware has been scanned and removed. I've also had my machine scanned by Hijack this, Norton SystemWorks and Registry Mechanic, and no problem can be found. &lt;/p&gt;
&lt;p&gt;I've been to the MS support pages, and have tried 
&lt;ol&gt;
&lt;li&gt;update installer (did not help)&lt;/li&gt;
&lt;li&gt;Modify the Registry (article 265194; effective for Office 2000)&lt;/li&gt;
&lt;li&gt;I've downloaded Windows Install Cleanup, but am not experienced enough to handle any problems that may ensue&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I can't begin to tell you how much this affects my work. I've lost 5 days of writing -- which is how I earn my living -- and I'm obsessed with getting my computer back the way it used to be.&lt;/p&gt;
&lt;p&gt;Please tell me how to fix this -- this is a major disaster for me.&lt;/p&gt;
&lt;h3&gt;Answer&lt;/h3&gt;
&lt;p&gt;I'm sorry to hear you're having these problems. It sounds like it's quite frustrating and you've run out of options. If the following information doesn't allow you to unblock yourself, I encourage you to call Microsoft Product Support Services.&lt;/p&gt;
&lt;p&gt;I try and answer question in three parts: 
&lt;ol&gt;
&lt;li&gt;why is this happening?&lt;/li&gt;
&lt;li&gt;what is&amp;nbsp;really failing?&lt;/li&gt;
&lt;li&gt;how can I fix this?&lt;/li&gt;&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size=4&gt;Why is this happening?&lt;/font&gt;&lt;/li&gt;
&lt;blockquote&gt;
&lt;p&gt;Creating stable corporate computing platforms was a pillar for the Total Cost of Ownership initiative for the Windows 2000 generation of releases. Part of that effort was the &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;290997"&gt;Windows Installer Resiliency&lt;/a&gt; features. In the controlled environment of corporate computing, these errors do not occur because the accompanying infrastructure is maintained to automatically respond to these issues thereby reducing total cost of ownership for the corporate customer.&lt;/p&gt;
&lt;p&gt;Generally, home computers are subject to much less supervisory oversight and &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;assistance&lt;/span&gt;. Without the help of a professional administrator, the quality of the application experience on Windows is at the discretion of the software vendor. Software vendor do make mistakes with the &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;290997"&gt;Windows Installer Resiliency&lt;/a&gt; features and thus you have this experience.&lt;/p&gt;
&lt;p&gt;This specific problem is frequently written about in periodicals user &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;assistance&lt;/span&gt; columns. I noted this in the blog entry &lt;a HREF="/windows_installer_team/archive/2005/11/01/486587.aspx"&gt;"Stop Installation Idiocy" PCWorld's Hassle Free PC article&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;li&gt;&lt;font size=4&gt;What is really failing?&lt;/font&gt;&lt;/li&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;a href="http://www.microsoft.com/windows2000/community/centers/management/msi_faq.mspx"&gt;Windows Installer Frequently Asked Questions&lt;/a&gt; has FAQ items titled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every time I launch my application, Windows Installer performs an installation. How can I determine the cause of the on-demand installation?&lt;/li&gt;
&lt;li&gt;How can I figure out why my package fails to install?&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;These entries will allow you to turn on Windows event logging and Windows Installer package logging which enable you to determine the which executable (client) and application (package) are providing misinformation to the Windows Installer service.&lt;/p&gt;
&lt;p&gt;Behind the covers, it kind of works this way 
&lt;ul&gt;
&lt;li&gt;a client program is trying to assure the correct state of an application.&lt;/li&gt;
&lt;li&gt;a client is calling a &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/installer_functions.asp"&gt;Windows Installer API&lt;/a&gt;&amp;nbsp;(such as &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/msigetcomponentpath.asp"&gt;MsiGetComponentPath&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;either
&lt;ul&gt;
&lt;li&gt;the system is in an inconsistent state and thereby unable to fulfill the request&lt;/li&gt;
&lt;li&gt;two or more packages installed to the system are inconsistent creating a conflict on the system.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;the sequence of system (Windows Installer system service) and application (client code and application packaging) functionality is unable to correct the triggering state thus the event is triggered again&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;li&gt;&lt;font size=4&gt;How can I fix this?&lt;/font&gt;&lt;/li&gt;
&lt;blockquote&gt;
&lt;p&gt;Generally, start by contacting the Software Vendor(s) that is (are) causing the problem. The event and install logs enabled by the above should allow you to find the offending combination. As a PC is actually a &lt;a href="http://en.wikipedia.org/wiki/The_Tragedy_of_the_Commons"&gt;commons&lt;/a&gt;, there may be more than one Software Vendor involved. The Software Vendor should be able to tell you how to repair their applications. This is a well traveled troubleshooting route traveled by corporate administrators.&lt;/p&gt;
&lt;p&gt;Some home users will give up at this point because they don't have the time or &lt;a href="http://en.wikipedia.org/wiki/Geek"&gt;geek&lt;/a&gt;-like persistence to work through all the details. Other home users will say they don't have media any more, the software company does not exist any more, or that was an &lt;a href="http://en.wikipedia.org/wiki/Software_piracy"&gt;unofficial copy&lt;/a&gt; of the application. Still others find their software provider unable to help them due to lack of knowledge, lack of experience, or a &lt;a href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=730852"&gt;propensity to blame&lt;/a&gt; the other software provider.&lt;/p&gt;
&lt;p&gt;Boiler plate suggestions from an ISV may include (in no particular order) 
&lt;ul&gt;
&lt;li&gt;Repair (&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/command_line_options.asp"&gt;msiexec&lt;/a&gt; /famus ...) 
&lt;/li&gt;&lt;li&gt;Uninstall and reinstall (&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/command_line_options.asp"&gt;msiexec&lt;/a&gt; /x ... followed by &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/command_line_options.asp"&gt;msiexec&lt;/a&gt; /i ...) 
&lt;/li&gt;&lt;li&gt;Install again (&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/command_line_options.asp"&gt;msiexec&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/reinstallmode.asp"&gt;REINSTALLMODE&lt;/a&gt;="famus" /i ... ) &lt;/li&gt;&lt;/ul&gt;You should be able to try this on your own too. 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hef="http://msdn.microsoft.com/library/en-us/msi/setup/msizap_exe.asp"&gt;MSIZap&lt;/a&gt; is the the Windows Installer tool that offers to disconnect the Windows Installer portion of the chain. MSIZap just operates on the Windows Installer store of information. MSIZap does not touch the the resources (files and registry keys) of the application. By using MSIZap to remove Windows Installer's knowledge of the application, the calls to the &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/installer_functions.asp"&gt;Windows Installer APIs&lt;/a&gt; will fail due to unrecognized parameters. The risk to removing the Windows Installer internal data is in how well the client that is calling the Windows Installer APIs responds to return codes (INSTALLSTATE_UNKNOWN for example). From the Windows Installer point of view, MSIZap is a tool of last resort as it eliminates Windows Installer from the equation.&lt;/p&gt;
&lt;p&gt;As one will note in the &lt;a HREF="/windows_installer_team/archive/2005/11/01/486587.aspx"&gt;"Stop Installation Idiocy" PCWorld's Hassle Free PC article&lt;/a&gt;, MSIZap is a choice user assistance columnists choose to call out.&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/ul&gt;Hope this helps... 
&lt;div id=CSBloggerSig&gt;
&lt;div&gt;&lt;font face=Verdana color=#969696 size=1&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=#969696 size=1&gt;[Author: &lt;a HREF="/rflaming"&gt;Robert Flaming&lt;/a&gt;]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/font&gt;&lt;a href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;font size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/font&gt;&lt;/a&gt;&lt;font size=1&gt;.&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=525213" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Frequently+Asked+Questions/default.aspx">Frequently Asked Questions</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Windows Installer Troubleshooting Tips from First Week of November</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/11/487666.aspx</link><pubDate>Fri, 11 Nov 2005 18:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:487666</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/487666.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=487666</wfw:commentRss><description>&lt;H4&gt;Question 1&lt;/H4&gt;
&lt;P&gt;What is the correct way to find whether a certain product (msi based setup) is installed on the machine?&lt;/P&gt;
&lt;H4&gt;Answer 1&lt;/H4&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/searching_for_existing_applications_files_registry_entries_or__ini_file_entries.asp"&gt;Searching for Existing Applications, Files, Registry Entries or .ini File Entries [Windows Installer]&lt;/A&gt; lists the built-in detect methods. In this case, the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/complocator_table.asp"&gt;CompLocator Table [Windows Installer]&lt;/A&gt; is intended to have the needed functionality.&lt;/P&gt;
&lt;P&gt;To find the ComponentId for the CompLocator row, 
&lt;OL&gt;
&lt;LI&gt;use &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/orca_exe.asp"&gt;Orca&lt;/A&gt; to open the MSI of the targeted product&lt;/LI&gt;
&lt;LI&gt;find the key binary dependency in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp"&gt;file table&lt;/A&gt; 
&lt;OL type=a&gt;
&lt;LI&gt;select the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp"&gt;file table&lt;/A&gt; from the &lt;B&gt;Tables&lt;/B&gt; window&lt;/LI&gt;
&lt;LI&gt;Choose &lt;B&gt;Edit&lt;/B&gt; &lt;B&gt;| Find&lt;/B&gt; from the menu&lt;/LI&gt;
&lt;LI&gt;In the &lt;B&gt;Find&lt;/B&gt; dialog, type in the name of the file that you have a binary dependency on into the &lt;B&gt;Find what&lt;/B&gt; edit box then click the &lt;B&gt;Find Next&lt;/B&gt; button&lt;/LI&gt;
&lt;LI&gt;Continue to hit &lt;B&gt;Find Next&lt;/B&gt; on the &lt;B&gt;Find&lt;/B&gt; dialog until a row in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp"&gt;file table&lt;/A&gt; will be highlighted so click the &lt;B&gt;Cancel&lt;/B&gt; button on the &lt;B&gt;Find&lt;/B&gt; dialog&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;copy the Component_ column value from the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp"&gt;file table&lt;/A&gt;&lt;/LI&gt;
&lt;OL type=a&gt;
&lt;LI&gt;Select the second column of highlighted row and choose &lt;B&gt;Edit | Copy cell &lt;/B&gt;menu item&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;find the component in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;component table&lt;/A&gt; &lt;/LI&gt;
&lt;OL type=a&gt;
&lt;LI&gt;select the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;component table&lt;/A&gt; from the &lt;B&gt;Tables&lt;/B&gt; window&lt;/LI&gt;
&lt;LI&gt;Choose &lt;B&gt;Edit&lt;/B&gt; &lt;B&gt;| Find&lt;/B&gt; from the menu&lt;/LI&gt;
&lt;LI&gt;In the &lt;B&gt;Find&lt;/B&gt; dialog, paste the value from step 3 into the &lt;B&gt;Find what&lt;/B&gt; edit box then click the &lt;B&gt;Find Next&lt;/B&gt; button&lt;/LI&gt;
&lt;LI&gt;Continue to hit &lt;B&gt;Find Next&lt;/B&gt; on the &lt;B&gt;Find&lt;/B&gt; dialog until a row in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;component table&lt;/A&gt; will be highlighted so click the &lt;B&gt;Cancel&lt;/B&gt; button on the &lt;B&gt;Find&lt;/B&gt; dialog&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Grab the GUID from the ComponentId&lt;/LI&gt;
&lt;OL type=a&gt;
&lt;LI&gt;Select the second column of highlighted row and choose &lt;B&gt;Edit | Copy cell &lt;/B&gt;menu item&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;Robert Flaming&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487666" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Windows Installer Troubleshooting Tips From Halloween</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/09/487559.aspx</link><pubDate>Wed, 09 Nov 2005 18:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:487559</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/487559.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=487559</wfw:commentRss><description>&lt;H4&gt;Question 1&lt;/H4&gt;In my lab automation that silently installs Windows Installer packages. This automation is inconsistently getting Error 1618 from its msiexec calls. Please help unblock this scenario as it's inhibiting our push to ship. 
&lt;H4&gt;Troubleshooting&amp;nbsp;1&lt;/H4&gt;First, start with the &lt;A href="http://msdn.microsoft.com/"&gt;MSDN Library&lt;/A&gt; and run a search for &lt;A href="http://search.microsoft.com/search/results.aspx?qu=1618+%22windows+installer%22+error&amp;amp;View=msdn&amp;amp;st=b&amp;amp;c=0&amp;amp;s=1&amp;amp;swc=0"&gt;"windows installer" 1618&lt;/A&gt;. This query (when I click it) turns up &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/initialization_errors.asp"&gt;Initialization Errors [Windows Installer]&lt;/A&gt; as the sixth hit. This page contains 
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Error code&lt;/TD&gt; 
&lt;TD&gt;Value&lt;/TD&gt;
&lt;TD&gt;Error&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ERROR_INSTALL_ALREADY_RUNNING&lt;/TD&gt;
&lt;TD&gt;1618&lt;/TD&gt;
&lt;TD&gt;An installation is already in progress&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Next, have a look at the machine &lt;A href="http://msdn.microsoft.com/library/en-us/debug/base/about_event_logging.asp"&gt;event log&lt;/A&gt; and look for the messages per the MSDN Topic &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/event_logging.asp"&gt;Event Logging&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Finally, when one puts this information together, the chances are high that another process, such as SMS or Group Policy, is triggering a silent install of a MSI based product thus the mutex is preventing the simultaneous install of the second product.&lt;/P&gt;
&lt;H4&gt;Solutions 1&lt;/H4&gt;
&lt;P&gt;To solve for this scenario, one needs to understand the mechanics of determining if Windows Installer is busy and then one needs to consider the appropriate behavior for their &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;application&lt;/SPAN&gt; for the "busy" case.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Generally if Windows Installer is busy , Windows Installer will set the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/_msiexecute_mutex.asp"&gt;Mutex&lt;/A&gt;.&amp;nbsp; For a sample demonstrating the mechanics of checking the mutex, see the&amp;nbsp;Windows Installer Platform SDK &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/bootstrapping.asp"&gt;bootstrapper code example&lt;/A&gt;:&amp;nbsp;&lt;FONT face="courier new"&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE hMutex = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool bInstallRunning = false;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char *szMutexName = "Global\\_MSISETUP_{2956EBA1-9B5A-4679-8618-357136DA66CA}";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hMutex = WIN::CreateMutex(NULL /*default security descriptor*/, FALSE, szMutexName);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!hMutex || ERROR_ALREADY_EXISTS == GetLastError())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bInstallRunning = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bInstallRunning = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;FONT face="courier new"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // only run one instance at a time&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bInstallRunning)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // silently return - correct return code ?&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uiRet = ERROR_INSTALL_ALREADY_RUNNING;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto CleanUp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do work here&lt;BR&gt;&lt;BR&gt;CleanUp:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(hMutex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(hMutex);&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;For Windows Installer 3.0 or greater, we &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;recommend&lt;/SPAN&gt; switching from the mutex to attempting to stop the msi service.&amp;nbsp; If you are unable to stop the service, the service is busy installing another product.&amp;nbsp; In pseudocode, these mechanics would look like&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;&lt;PRE&gt;if (MSIServer is not running)
    bInstallRunning = true; &lt;FONT size=2&gt;// because if the service isn't running &lt;FONT size=2&gt;there can't be an install running&lt;/FONT&gt;&lt;/FONT&gt;
else  if (MSIServer accepts SERVICE_ACCEPT_STOP)
    bInstallRunning = false; &lt;FONT size=2&gt;// because if it can stop it can't be installing something&lt;/FONT&gt;
else
    bInstallRunning = false; &lt;FONT size=2&gt;// because it won't accept the stop, so it's doing an install. &lt;/FONT&gt;&lt;/PRE&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;With either of these solutions, a non-privileged context will be unable to detect the state of the engine.&lt;/P&gt;
&lt;P&gt;Now that you know the mechanics, you need to consider what to do when the Windows Installer is "busy".&amp;nbsp; There are a number of options and which one you choose depends on your &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;judgment&lt;/SPAN&gt;.&amp;nbsp; Some solutions choose surface the fact that the Windows Installer is busy and suggest the user try again later.&amp;nbsp; Other solutions choose to put the "busy" check in a polling loop and attempt an auto recover from the mutex.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H4&gt;Question 2&lt;/H4&gt;
&lt;P&gt;I have a Windows Installer package that &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/installinitialize_action.asp"&gt;InstallInitialize&lt;/A&gt; shows all the features and components are installing Action:Local but after the install the feature is advertised. Can you help explain this? (msi packages and verbose logs sent too)&lt;/P&gt;
&lt;H4&gt;Answer 2&lt;/H4&gt;
&lt;P&gt;Generally to find these issues I look at the components with conditions. In this case we have the following &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;Component Table&lt;/A&gt; Fragments 
&lt;BLOCKQUOTE&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Component&lt;/TD&gt; 
&lt;TD&gt;ComponentId&lt;/TD&gt;
&lt;TD&gt;Directory_&lt;/TD&gt;
&lt;TD&gt;Attributes&lt;/TD&gt;
&lt;TD&gt;Condition&lt;/TD&gt;
&lt;TD&gt;KeyPath&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;C_Server_ConnectorKeys_For_NonRMS.540EA3C0_A5E9_41EA_A585_822C09EA2650&lt;/TD&gt;
&lt;TD&gt;{3162C002-E983-4C45-BE65-A0EADF35AD49}&lt;/TD&gt;
&lt;TD&gt;SDK_DIR.540EA3C0_A5E9_41EA_A585_822C09EA2650&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;IS_ROOT_HEALTH_SERVICE=0&lt;/TD&gt;
&lt;TD&gt;R_Server_ConnectorKeys_For_NonRMS10.540EA3C0_A5E9_41EA_A585_822C09EA2650&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;C_Core_ConnectorKeys.80B659D9_F758_4E7D_B4FA_E53FC737DCC9&lt;/TD&gt;
&lt;TD&gt;{43DC7EF4-E685-45E1-9B3B-9843A2853E43}&lt;/TD&gt;
&lt;TD&gt;CORE_DIR.80B659D9_F758_4E7D_B4FA_E53FC737DCC9&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;USE_SETTINGS_FROM_AD=0&lt;/TD&gt;
&lt;TD&gt;R_Core_Connector01.80B659D9_F758_4E7D_B4FA_E53FC737DCC9&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Cross Referencing the C_Server_ConnectorKeys_For_NonRMS.540EA3C0_A5E9_41EA_A585_822C09EA2650 GUID {3162C002-E983-4C45-BE65-A0EADF35AD49} with the install log and one finds 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;MSI (s) (44:6C) [14:26:41:656]: Executing op: ComponentUnregister(ComponentId={3162C002-E983-4C45-BE65-A0EADF35AD49},,BinaryType=0,PreviouslyPinned=1) &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Now I take the condition and search for it in the log 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;&lt;PRE&gt;MSI (s) (44!AC) [14:26:26:828]: PROPERTY CHANGE: Modifying IS_ROOT_HEALTH_SERVICE property. Its current value is '0'. Its new value: '1'.&lt;/PRE&gt;&lt;PRE&gt;...&lt;/PRE&gt;&lt;PRE&gt;Property(S): IS_ROOT_HEALTH_SERVICE = 1
&lt;/PRE&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;If it were true that this property was set, it would cause the component to be absent and its absence would cause the feature to appear advertised.&lt;/P&gt;
&lt;H4&gt;Design Suggestion for Question 2&lt;/H4&gt;
&lt;P&gt;If the advertised state on the feature is the problem, I suspect what’s called for here is another feature. One could have a child feature that just contains the components that will be toggled and is marked to follow parent. Depending on whether that works for all scenarios, there is also the option to have the new feature sit at the root and then write code to toggle the state of the feature.&lt;/P&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;nbsp;&lt;FONT size=1&gt;Editing credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Phil Wilson, MSI MVP,&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;Content credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Carolyn, MSI Team Dev Lead. You can get other Carolyn insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;&lt;FONT color=#003399&gt;Windows Installer Chat Archives&lt;/FONT&gt;&lt;/A&gt; 
&lt;LI&gt;Hem, MSI Team Dev. You can get other Hem insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;&lt;FONT color=#003399&gt;Windows Installer Chat Archives&lt;/FONT&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;Robert Flaming&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487559" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Instance of Troubleshooting Patch Applicability</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/04/487044.aspx</link><pubDate>Fri, 04 Nov 2005 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:487044</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/487044.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=487044</wfw:commentRss><description>&lt;P&gt;
&lt;H3&gt;Context: &lt;/H3&gt;While troubleshooting Windows Installer installs can be complex, troubleshooting patch installs adds a couple more layers of complexity (patch transforms and applicability rules). Given the lack of patch troubleshooting documentation (at least that I've seen) I figured I'd take a case where Carolyn has provided detailed analysis for a customer inquiry from Product Support. 
&lt;H3&gt;Desired Behavior: &lt;/H3&gt;Patch 1 targets the Base package and patch 2 targets both the Base and Patch 1 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;H3&gt;Actual Behavior: &lt;/H3&gt;Applying a patch 2 after patch 1 results in the error &lt;I&gt;“The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch.”&lt;/I&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;H3&gt;Analysis&lt;/H3&gt;You can easily analyze a &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/patching.asp"&gt;MSP&lt;/A&gt; and the usual place to start looking when a patch isn't applicable is the applicability criteria for the MSP. For a patch, there's two layers. 
&lt;BLOCKQUOTE&gt;
&lt;H4&gt;Layer 1&lt;/H4&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/template_summary.asp"&gt;PID_TEMPLATE&lt;/A&gt; summary property of the MSP itself. This is the list of target &lt;A href="http://msdn.microsoft.com/library/en-us/vsintro7/html/vxgrfproductcodeproperty.asp"&gt;ProductCodes&lt;/A&gt; for the patch. You can bypass this layer using &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/patch.asp"&gt;PATCH&lt;/A&gt;={path to patch} on the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/command_line_options.asp"&gt;command line&lt;/A&gt; and invoking a /i type installation operation. &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiapplypatch.asp"&gt;MsiApplyPatch&lt;/A&gt; and/or "/p patch.msp" involve this layer. 
&lt;H4&gt;Layer 2&lt;/H4&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/revision_number_summary.asp"&gt;PID_REVNUMBER&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/character_count_summary.asp"&gt;PID_CHARCOUNT&lt;/A&gt; summary properties of the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/embedded_transforms.asp"&gt;MSTs embedded&lt;/A&gt; within the MSP. The revision number gives the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/productcode_property.asp"&gt;ProductCode&lt;/A&gt;-&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/productversion.asp"&gt;ProductVersion&lt;/A&gt;/&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/productcode_property.asp"&gt;ProductCode&lt;/A&gt;-&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/productversion.asp"&gt;ProductVersion&lt;/A&gt;/&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/upgradecode.asp"&gt;UpgradeCode&lt;/A&gt; set between the target and update images. The charcount identifies the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/properties_table_patchwiz_dll_.asp"&gt;validation flags&lt;/A&gt;. &lt;/BLOCKQUOTE&gt;
&lt;P&gt;You can use &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evconCOMDebuggingTools.asp"&gt;dfview&lt;/A&gt; to look at the substorages within a MSP to find out how many targets it has. That, or just use &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiinfo_exe.asp"&gt;msiinfo&lt;/A&gt; on the MSP since that gives you the list of embedded transforms. Each case here has a single set of embedded transforms.&amp;nbsp; &lt;FONT face="courier new" size=2&gt;&lt;BR&gt;&lt;/FONT&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new" size=2&gt;C:\scratch\rfc&amp;gt;msiinfo patch02.msp
ClassId = {000C1086-0000-0000-C000-000000000046}
[ 5][/k] Keywords = PatchSourceList
[ 7][/p] Template(MSI CPU,LangIDs) = {F7877CD1-F33B-4DCD-8B11-A72BB64F22E6}
[ 8][/l] SavedBy = &lt;FONT size=5&gt;&lt;B&gt;:QPPrevVersionToQPNewVersion;:#QPPrevVersionToQPNewVersion&lt;/B&gt;&lt;/FONT&gt;
[ 9][/v] Revision = {68C7ED9B-4938-492B-B88B-B463E5000817}
[15][/w] Words(MSI Source Type) = 3
 
C:\scratch\rfc&amp;gt;msiinfo patch01.msp
ClassId = {000C1086-0000-0000-C000-000000000046}
[ 5][/k] Keywords = PatchSourceList
[ 7][/p] Template(MSI CPU,LangIDs) = {F7877CD1-F33B-4DCD-8B11-A72BB64F22E6}
[ 8][/l] SavedBy = &lt;FONT size=5&gt;&lt;B&gt;:QPPrevVersionToQPNewVersion;:#QPPrevVersionToQPNewVersion&lt;/B&gt;&lt;/FONT&gt;
[ 9][/v] Revision = {5E64DBA1-44E9-4A04-AF2C-5CCCD109C95D}
[15][/w] Words(MSI Source Type) = 3&lt;/FONT&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;So, patch02 is certainly not a multi-target patch. &lt;/P&gt;
&lt;P&gt;Now to get to the 2nd layer, you have to go back to the transforms in the temp folder of the machine that generated the patch (assuming the DontRemoveTempFolderWhenFinished property was set in the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/properties_table_patchwiz_dll_.asp"&gt;Property Table of the PCP file&lt;/A&gt;). Oh, and one other thing to add. None of these patches have the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msipatchsequence_table.asp"&gt;MsiPatchSequence&lt;/A&gt; table so they follow 2.0 patch application rules which means chronological patch application (order in which patches are applied on the machine). Here's the requisite data from the transforms: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new" size=2&gt;
C:\scratch\rfc&amp;gt;msiinfo patch01.mst
ClassId = {000C1082-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Customers Product
[ 3][/j] Subject = Customers Product
[ 4][/a] Author = Customers Company
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact:  Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 8][/l] SavedBy = Intel;1033
[ 9][/v] Revision = {F7877CD1-F33B-4DCD-8B11-A72BB64F22E6}&lt;FONT size=5&gt;&lt;B&gt;10.4.27.01&lt;/B&gt;&lt;/FONT&gt;;{F7877CD1-F
33B-4DCD-8B11-A72BB64F22E6}&lt;FONT color=red size=5&gt;&lt;B&gt;10.5.28.03&lt;/B&gt;&lt;/FONT&gt;;{D9929871-61DC-4461-AD49-29212301A721}
[12][/r] Created = 2005/03/11 09:46:38
[14][/g] Pages(MSI Version Used) = 200
[16][/h] Characters(MSI Transform) = 144834583
[18][/n] Application = InstallShield« Developer 8.0
[19][/u] Security = 1
 
C:\scratch\rfc&amp;gt;msiinfo patch02.mst
ClassId = {000C1082-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Customers Product
[ 3][/j] Subject = Customers Product
[ 4][/a] Author = Customers Company
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact:  Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 8][/l] SavedBy = Intel;1033
[ 9][/v] Revision = {F7877CD1-F33B-4DCD-8B11-A72BB64F22E6}&lt;FONT size=5&gt;&lt;B&gt;10.4.27.01&lt;/B&gt;&lt;/FONT&gt;;{F7877CD1-F
33B-4DCD-8B11-A72BB64F22E6}&lt;FONT color=red size=5&gt;&lt;B&gt;10.5.28.04&lt;/B&gt;&lt;/FONT&gt;;{D9929871-61DC-4461-AD49-29212301A721}
[12][/r] Created = 2005/03/11 09:46:38
[14][/g] Pages(MSI Version Used) = 200
[16][/h] Characters(MSI Transform) = 144834583
[18][/n] Application = InstallShield« Developer 8.0
[19][/u] Security = 1&lt;/FONT&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/character_count_summary.asp"&gt;char count&lt;/A&gt; is a combination of &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msicreatetransformsummaryinfo.asp"&gt;validation and error suppression&lt;/A&gt;. As the Character Count MSDN Topic says the upper word is validation and the lower word is error condition flags. For both the above transforms, Char Count is 144834583. If you convert 144834583 to hex, you get 0x008A20017 thus the upper word is 8A2 and the lower word is 17. This further means 8A2 is the validation condition. 017 is the error condition.&lt;/P&gt;
&lt;P&gt;Now let's break these down using the MSDN Topic &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msicreatetransformsummaryinfo.asp"&gt;MsiCreateTransformSummaryInfo&lt;/A&gt;. 
&lt;UL&gt;
&lt;LI&gt;Validation Translation: &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Note&lt;/B&gt; that 0x8A2 is &lt;B&gt;not&lt;/B&gt; the default patchwiz value. Our recommendation is 0x922 per the MSDN Topic &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/targetimages_table_patchwiz_dll_.asp"&gt;TargetImages Table (PatchWiz.DLL)&lt;/A&gt;. &lt;BR&gt;&lt;BR&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Value&lt;/TH&gt;
&lt;TH&gt;Flags&lt;/TH&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;0x8A2&lt;/TD&gt;
&lt;TD&gt;MSITRANSFORM_VALIDATE_UPGRADECODE (0x00000800) +&lt;BR&gt;MSITRANSFORM_VALIDATE_NEWLESSEQUALBASEVERSION (0x00000080) + &lt;BR&gt;MSITRANSFORM_VALIDATE_UPDATEVERSION (0x00000020) + &lt;BR&gt;MSITRANSFORM_VALIDATE_PRODUCT (0x00000002) &lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;LI&gt;Error Condition Translation: &lt;BR&gt;&lt;BR&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Value&lt;/TH&gt;
&lt;TH&gt;Flags&lt;/TH&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;0x17&lt;/TD&gt;
&lt;TD&gt;MSITRANSFORM_ERROR_UPDATEMISSINGROW (0x00000010) +&lt;BR&gt;MSITRANSFORM_ERROR_ADDEXISTINGTABLE (0x00000004) + &lt;BR&gt;MSITRANSFORM_ERROR_DELMISSINGROW (0x00000002) + &lt;BR&gt;MSITRANSFORM_ERROR_ADDEXISTINGROW (0x00000001) &lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H4&gt;Breaking down 0x8A2 into behavior&lt;/H4&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Flag&lt;/TH&gt;
&lt;TH&gt;Behavior&lt;/TH&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;MSITRANSFORM_VALIDATE_UPGRADECODE (0x00000800)&lt;/TD&gt;
&lt;TD&gt;Validate UpgradeCode for equality. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;MSITRANSFORM_VALIDATE_NEWLESSEQUALBASEVERSION (0x00000080)&lt;/TD&gt;
&lt;TD&gt;See Below. &lt;STRONG&gt;Note: This is an unusual choice.&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;MSITRANSFORM_VALIDATE_UPDATEVERSION (0x00000020)&lt;/TD&gt;
&lt;TD&gt;major.minor.upgrade fields of Product Version should be validated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD&gt;MSITRANSFORM_VALIDATE_PRODUCT (0x00000002)&lt;/TD&gt;
&lt;TD&gt;Validate ProductCode for equality&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;So what does newlessequalbase mean?&lt;/H4&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;InstalledVersion &amp;lt;= BaseVersion. &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Installed: ProductVersion (ProductVersion of Installed product from in-memory view of Property table)&lt;BR&gt;Base: TransformVersion &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The base version that is used is the "Old" Product's version in the Revision property. &lt;/P&gt;
&lt;P&gt;So for Patch02, here's what we have:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Installed = 10.5.28.03 (this is the product + Patch01 view of the Property table)&lt;BR&gt;Base = 10.4.27.01 &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The comparison is then:&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="courier new" size=2&gt;10.5.28.03 &amp;lt;= 10.4.27.01&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;This always evaluates to false. Now if you apply Patch02 on top of just the product (no Patch01), you have the comparison as:&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="courier new" size=2&gt;10.4.27.01 &amp;lt;= 10.4.27.01&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;That's true. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H3&gt;Conclusion&lt;/H3&gt;
&lt;P&gt;In the end, these patches are poorly authored for their validation conditions. They should use the recommended value: 0x922 and additionally the targeting of Patch02 is all wrong. Since it doesn't obsolete Patch01, it would have to target Patch01 which from analyzing the patch, it does not. It only targets RTM and therefore it's impossible to have a valid sequence of patches from RTM -&amp;gt; Patch01 -&amp;gt; Patch02. &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;Content credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Carolyn, MSI Team Dev Lead. You can get other Carolyn insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;Windows Installer Chat Archives&lt;/A&gt; 
&lt;LI&gt;Nitin, Phil, Alden, and Erik, Microsoft Support Team&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;Robert Flaming&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487044" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Windows Installer Troubleshooting Tips from Last Week of October</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/02/486616.aspx</link><pubDate>Wed, 02 Nov 2005 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:486616</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/486616.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=486616</wfw:commentRss><description>&lt;H4&gt;Question 1&lt;/H4&gt;Any tips troubleshooting silent install exiting with error 1618? 
&lt;H4&gt;Answer 1&lt;/H4&gt;
&lt;P&gt;Start with the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;Windows Installer SDK&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;First, search for &lt;A href="http://search.microsoft.com/search/results.aspx?qu=1618+%22windows+installer%22+error&amp;amp;View=msdn&amp;amp;st=b&amp;amp;c=0&amp;amp;s=1&amp;amp;swc=0"&gt;“windows installer” 1618&lt;/A&gt; which turns up &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/initialization_errors.asp"&gt;Initialization Errors [Windows Installer]&lt;/A&gt; as the sixth hit.&lt;/P&gt;
&lt;P&gt;When you look at this page you’ll see 
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;ERROR_INSTALL_ALREADY_RUNNING&lt;/TD&gt;
&lt;TD&gt;1618&lt;/TD&gt;
&lt;TD&gt;An installation is already in progress&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Second, have a look at your event log and look for the messages per the MSDN Topic &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/event_logging.asp"&gt;Event Logging&lt;/A&gt;. 
&lt;P&gt;When one puts this &lt;SPAN style="COLOR: maroon"&gt;information&lt;/SPAN&gt; together, the chances are high something else is triggering a silent install of a MSI based product thus the mutex is preventing the simultaneous install of the second product.&lt;/P&gt;
&lt;H4&gt;Question 2&lt;/H4&gt;
&lt;P&gt;Can you help me troubleshoot my component states?&lt;/P&gt;
&lt;P&gt;I have a shared component Component_Perf. It is shared between A.msi and B.msi. 
&lt;P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Install A.msi&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;MSI (s) (68:30) [11:46:28:449]: Component: Component_Perf; Installed: Absent; Request: Local; Action: Local &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Install B.msi&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;MSI (s) (68:50) [11:50:03:096]: Component: Component_Perf; Installed: Absent; Request: Local; &lt;FONT color=red&gt;Action: Local&lt;/FONT&gt; &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since the component is already installed with A.msi, I was expecting this be &lt;FONT color=red&gt;Action: Null&lt;/FONT&gt;? Specifically&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Install B.msi&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;&lt;B&gt;&lt;FONT color=#ff0000&gt;Installed: Local&lt;/FONT&gt;;&lt;/B&gt; Request: Local; &lt;B&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000&gt;Action: Null&lt;/FONT&gt;&lt;/B&gt; &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The behavior seems as expected during uninstallation.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;Uninstall B.msi&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;MSI (s) (68:A8) [12:02:01:415]: Component: Component_Perf; Installed: Local; Request: Absent; &lt;FONT color=red&gt;Action: Null&lt;/FONT&gt; &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;&lt;B&gt;Uninstall A.msi&lt;/B&gt; 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;MSI (s) (68:74) [12:06:18:157]: Component: Component_Perf; Installed: Local; Request: Absent; Action: Absent &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;What am I missing?&lt;/P&gt;
&lt;H4&gt;Answer 2&lt;/H4&gt;
&lt;P&gt;You still have to install the component for Product B. Note that it shows up as "Installed: Absent" because it's not currently installed. The real question is why do you expect the Action state to be Null? Unless there's a higher version of the component on the machine, it's already installed for Product B, or it's condition evaluates to false, the Action state of Local makes sense. 
&lt;P&gt;So essentially Installed = Installed for Product and not Installed on Computer.&lt;/P&gt;
&lt;H4&gt;Question 3&lt;/H4&gt;Is there a way I can achieve the following Custom Action calls using Windows Installer without implementing my own detection mechanism? 
&lt;OL&gt;
&lt;LI&gt;Execute CA_Install with the first installed product that includes Component_Perf 
&lt;LI&gt;Execute CA_Remove with the last removed product that includes Component_Perf&lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;Answer 3&lt;/H4&gt;
&lt;P&gt;There is an API called &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msienumclients.asp"&gt;MsiEnumClients&lt;/A&gt; that gives you client lists of a component. If you're only dealing with per-machine installs, it's an easy API that'll work for you.&lt;/P&gt;
&lt;H4&gt;Question 4&lt;/H4&gt;
&lt;P&gt;I want to make a script that adds to the order a constant, to every line in the controlEvent table which has a “Spawndialog” value. There may be more than one such line in every dialog. How can I write a SQL query that updates these lines?&lt;/P&gt;
&lt;H4&gt;Answer 4&lt;/H4&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/sql_syntax.asp"&gt;SQL Syntax [Windows Installer]&lt;/A&gt; says 
&lt;BLOCKQUOTE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;Modify existing records in a table&lt;/TD&gt;
&lt;TD&gt;UPDATE {table-list} SET {column}= {constant} [, {column}= {constant}][, ...] [WHERE {operation-list}] &lt;BR&gt;&lt;BR&gt;UPDATE queries only work on nonprimary key columns.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/examples_of_database_queries_using_sql_and_script.asp"&gt;Examples of Database Queries Using SQL and Script&lt;/A&gt; says 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;Modify an existing record in a table&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The following command line changes the existing value in the Title field to "Performances." The updated record has "Arts" as its primary key and is in the Feature table of the Test.msi database. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Cscript WiRunSQL.vbs Test.msi "UPDATE `Feature` SET `Feature`.`Title`='Performances' WHERE `Feature`.`Feature`='Arts'"&lt;/B&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Addition however is not part of the subset of SQL Syntax that Windows Installer supports. The way I’ve solved this in the past is to start with the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/working_with_queries.asp"&gt;Working with Queries&lt;/A&gt; MSDN Topic and between steps 3 and 4, I run &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msirecordgetinteger.asp"&gt;MsiRecordGetInteger&lt;/A&gt;, do the math, and run &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msirecordsetinteger.asp"&gt;MsiRecoredSetInteger&lt;/A&gt;.&lt;/P&gt;
&lt;H4&gt;Question 5&lt;/H4&gt;Is there any way to force the components to reload without doing a major upgrade? 
&lt;H4&gt;Answer 5&lt;/H4&gt;No. Please review MSDN Topic &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/patching_and_upgrades.asp"&gt;Patching and Upgrades&lt;/A&gt;, specifically the table at the end of the topic. Given what I understand of this case, this question asks for &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/major_upgrades.asp"&gt;Major Upgrade&lt;/A&gt; behavior in a &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/small_updates.asp"&gt;Small Update&lt;/A&gt; which is not possible. Also note: &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/minor_upgrades.asp"&gt;Minor Upgrade&lt;/A&gt; does not apply because this functionally wants to reorganize the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/specifying_feature_component_relationships.asp"&gt;Feature-Component&lt;/A&gt; tree which is not allowed in a &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/minor_upgrades.asp"&gt;minor upgrade&lt;/A&gt;. 
&lt;H4&gt;Question 6&lt;/H4&gt;Any thoughts on causing the files to reinstall to the target directory? 
&lt;H4&gt;Answer 6&lt;/H4&gt;I think this asks “can I change the target path during maintenance mode?” to which the answer is ‘No’ per MSDN topic &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/changing_the_target_location_for_a_directory.asp"&gt;Changing the Target Location for a Directory&lt;/A&gt; 
&lt;H4&gt;Question 7&lt;/H4&gt;Can you provide assistance troubleshooting error 1334? 
&lt;P&gt;I generated a patch and upon applying that patch received this error: 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;&lt;PRE&gt;Error 1334. The file 'Indexes.cmp.751F2241_A570_4290_8C69_419C00462AA5' cannot be installed because the file cannot be found in cabinet file 'Product.cab'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.

MSI (s) (9C:C4) [13:26:07:755]: Product: Division-Product 9.0 -- Error 1334. The file 'Indexes.cmp.751F2241_A570_4290_8C69_419C00462AA5' cannot be installed because the file cannot be found in cabinet file 'Product.cab'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.
&lt;/PRE&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;So I looked in the SDK for don’t do’s of creating a patch package. Everything I was able to verify as not a problem except for “do not change the order of files in a cabinet”…. When I investigated that one, here’s what I had in my base MSI: 
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;386&lt;/TD&gt;
&lt;TD&gt;PreLoad.cmp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\1157\Company\Data\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;I&gt;387&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;Indexes.cmp&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;7817&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;\Program Files\Division\Product\SQL\Install\2416\Company\&lt;/I&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;388&lt;/TD&gt;
&lt;TD&gt;Tables.cmp&lt;/TD&gt;
&lt;TD&gt;19842&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;389&lt;/TD&gt;
&lt;TD&gt;Driver.ini&lt;/TD&gt;
&lt;TD&gt;358&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;390&lt;/TD&gt;
&lt;TD&gt;DexProcs.cmp&lt;/TD&gt;
&lt;TD&gt;302470&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;391&lt;/TD&gt;
&lt;TD&gt;DexProcs.drp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;392&lt;/TD&gt;
&lt;TD&gt;DexProcs.drp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\System\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;393&lt;/TD&gt;
&lt;TD&gt;Driver.ini&lt;/TD&gt;
&lt;TD&gt;49&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Lesson\2416\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;394&lt;/TD&gt;
&lt;TD&gt;Driver.ini&lt;/TD&gt;
&lt;TD&gt;473&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;395&lt;/TD&gt;
&lt;TD&gt;CAMAU.cnk&lt;/TD&gt;
&lt;TD&gt;48154&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;396&lt;/TD&gt;
&lt;TD&gt;CAMCA.cnk&lt;/TD&gt;
&lt;TD&gt;48154&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\ &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;…and here’s the relevant section of my new MSI:&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;386&lt;/TD&gt;
&lt;TD&gt;PreLoad.cmp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\1157\Company\Data\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;I&gt;387&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;Driver.ini&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;49&lt;/I&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;I&gt;\Program Files\Division\Product\SQL\Lesson\2416\&lt;/I&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;388&lt;/TD&gt;
&lt;TD&gt;Driver.ini&lt;/TD&gt;
&lt;TD&gt;473&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;389&lt;/TD&gt;
&lt;TD&gt;Indexes.cmp&lt;/TD&gt;
&lt;TD&gt;7817&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;390&lt;/TD&gt;
&lt;TD&gt;Tables.cmp&lt;/TD&gt;
&lt;TD&gt;19842&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;391&lt;/TD&gt;
&lt;TD&gt;DexProcs.drp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;392&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Stubs.drp&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;16&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;\Program Files\Division\Product\SQL\Upgrade\2416\9.0.62\Company\&lt;/STRONG&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;393&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Stubs.drp&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;16&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;\Program Files\Division\Product\SQL\Upgrade\2416\9.0.62\System\&lt;/STRONG&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;394&lt;/TD&gt;
&lt;TD&gt;DexProcs.drp&lt;/TD&gt;
&lt;TD&gt;16&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Upgrade\2416\7.50.0\System\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;395&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Driver.ini&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;475&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;\Program Files\Division\Product\SQL\Upgrade\2416\9.0.62\&lt;/STRONG&gt; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;396&lt;/TD&gt;
&lt;TD&gt;DexProcs.cmp&lt;/TD&gt;
&lt;TD&gt;302470&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\SQL\Install\2416\Company\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;397&lt;/TD&gt;
&lt;TD&gt;CAMAU.cnk&lt;/TD&gt;
&lt;TD&gt;48154&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;398&lt;/TD&gt;
&lt;TD&gt;CAMCA.cnk&lt;/TD&gt;
&lt;TD&gt;48154&lt;/TD&gt;
&lt;TD&gt;\Program Files\Division\Product\ &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;OK, so the error is on the &lt;I&gt;italic&lt;/I&gt; line above, and well, it’s the first file that doesn’t match its old ID. The &lt;B&gt;bold&lt;/B&gt; files above were added, which appeared to cause this whole section to get spanked around.&lt;/P&gt;
&lt;P&gt;Are there ways that I can get around this issue?&lt;/P&gt;
&lt;H4&gt;Answer 7&lt;/H4&gt;You need to build your upgrade package based off of the old such that you do not add files in the middle. You control how your package is built so you'll have to handle this yourself. Any new files in the upgrade package need to be added at the end of the file sequence. 
&lt;H4&gt;Question 8&lt;/H4&gt;I would like to find out that is there a property that I can set inside my MSI so that we force the installer to cache a full msi instead of the msi in the installer cache? 
&lt;H4&gt;Answer 8&lt;/H4&gt;Have a look at the ‘v’ option of the /f switch in the MSDN Topic &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/command_line_options.asp"&gt;Command Line Options&lt;/A&gt;. 
&lt;H4&gt;Question 9&lt;/H4&gt;I get an error message that says: "Windows Installer Service can’t be contacted" 
&lt;H4&gt;Answer 9&lt;/H4&gt;There’s this KB: &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;319624"&gt;"Windows Installer Service could not be accessed" error message when installing application”&lt;/A&gt;. 
&lt;H4&gt;Question 10&lt;/H4&gt;Do you have troubleshooting pointers for the following error that occurs on x64? 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;Info 1721.There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. Action: WiaRegSvr32.cmd, location: C:\Winparty2005\WiaRegSvr32.cmd, command: WiaRegSrv32.cmd &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;Answer 10&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Have you verified that your code runs properly outside of an MSI installation? 
&lt;LI&gt;Does the .cmd file work on x64? 
&lt;LI&gt;Does your .cmd file run on x64 outside of the MSI package from the same location that it would normally be run (per the log file)?&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Question 11&lt;/H4&gt;Is there an IA64 version of MSI 3.0 redist? 
&lt;H4&gt;Answer 11&lt;/H4&gt;See &lt;A href="http://support.microsoft.com/kb/898715/"&gt;http://support.microsoft.com/kb/898715/&lt;/A&gt;. MSI 3.1 ships with Win2K3 SP1 but you should update to v2 since v1 had a bug that could cause installations to fail during silent install scenarios. 
&lt;H4&gt;Question 12&lt;/H4&gt;How do I extract files from an MSI package using native code? 
&lt;H4&gt;Answer 12&lt;/H4&gt;Use &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiinstallproduct.asp"&gt;MsiInstallProduct&lt;/A&gt; and include ACTION=ADMIN in szCommandLine... 
&lt;H4&gt;Question 13&lt;/H4&gt;What are the top 10 ways to learn about ClickOnce? 
&lt;H4&gt;Answer 13&lt;/H4&gt;Posted at &lt;a href="http://blogs.msdn.com/saurabh/archive/2005/10/28/486106.aspx"&gt;http://blogs.msdn.com/saurabh/archive/2005/10/28/486106.aspx&lt;/A&gt; 
&lt;H4&gt;Question 14&lt;/H4&gt;
&lt;P&gt;My Source MSI has 2 files both having File Version : 10&lt;BR&gt;And My Target MSI has 2 files both having File Version : 11&lt;/P&gt;
&lt;P&gt;I want to create an .msp for only for one file, not both the files. But when I create a .pcp file it is picking up both the files as the FileVerison has been changed. How can I do that? &lt;/P&gt;
&lt;H4&gt;Answer 14&lt;/H4&gt;Either don’t put the updated file in your Update MSI before building the patch or list the File foreign key for the file(s) you don’t want to update in the UpgradedFilesToIgnore table in the PCP file. See &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/upgradedfilestoignore_table_patchwiz_dll_.asp"&gt;http://msdn.microsoft.com/library/en-us/msi/setup/upgradedfilestoignore_table_patchwiz_dll_.asp&lt;/A&gt; for more information. 
&lt;P&gt;&lt;FONT size=1&gt;Content credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Carolyn, MSI Team Dev Lead. You can get other Carolyn insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;Windows Installer Chat Archives&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Hem, MSI Team Dev. You can get other Hem insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;Windows Installer Chat Archives&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Heath, Microsoft Developer. You can get other Heath insights about developing for Windows Installer from &lt;a href="http://blogs.msdn.com/heaths"&gt;Heath's blog&lt;/A&gt; 
&lt;LI&gt;Prashant, Microsoft Developer&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;Robert Flaming&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486616" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>"Stop Installation Idiocy" PCWorld's Hassle Free PC article</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/01/486587.aspx</link><pubDate>Tue, 01 Nov 2005 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:486587</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/486587.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=486587</wfw:commentRss><description>&lt;P&gt;While searching for news with "Windows Installer" in the subject, I recently came across the &lt;A href="http://search.pcworld.com/query.html?col=all&amp;amp;inthe=315360000&amp;amp;ws=0&amp;amp;nh=10&amp;amp;rf=0&amp;amp;lk=1&amp;amp;qm=0&amp;amp;st=1&amp;amp;rq=0&amp;amp;ql=a&amp;amp;si=0&amp;amp;dt=an&amp;amp;ht=0&amp;amp;la=en&amp;amp;fl0=&amp;amp;op0=&amp;amp;qt=%22Hassle-Free+PC%22"&gt;Hassle Free PC&lt;/A&gt; article &lt;A href="http://www.pcworld.com/news/article/0,aid,122926,00.asp"&gt;Hassle-Free PC: Fix Stubborn Windows Install Errors&lt;/A&gt; where a reader asked for assistance with the Windows Installer dialogs under the subheading “Stop Installation Idiocy”. I thought I'd offer some deeper context on this scenario.&lt;/P&gt;
&lt;P&gt;First, if this dialog happens during First Run of the application, this can be by design. Windows Installer encourages application to write their “user data” at first run of the application. This is particularly useful for applications that install to machines that will have multiple users such as home machines with Fast User Switching enabled or to business machines that multiple people will use. &lt;/P&gt;
&lt;P&gt;Second, if the application is installing something “on demand”, this too can be by design. This &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/installation_on_demand.asp"&gt;Installation-On-Demand&lt;/A&gt; can be useful for a number of design reasons, particularly when an application has a feature that is less frequently. As a hypothetical, let’s say Word studied it’s features and discovered that Mail Merge was used quite infrequently save for holiday greetings times. The Office deployment developers could choose to expose the Mail Merge option on the menu but leave it on the CD until the user actually invoked it. At the point the user invoked Mail Merge, Word could recognize the bits were not installed and then call to the installation package (MSI) and ask for them to be installed. Given all this happens within the application context, the application can wait for the install to complete then load the functionality without the user ever having to leave their context. Admittedly, if a user is not aware that this is possible, this can be disorienting. &lt;/P&gt;
&lt;P&gt;Third, if the application state has become inconsistent, this too can be by design. The &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/resiliency.asp"&gt;Resiliency&lt;/A&gt; features of the Windows Installer are designed to both detect when an application is out of specification as well as provide actions to put the application back into compliance with the specification. From one point of view, one could say this is the Windows Installer way of addressing DLL Hell. Window Installer will be provide the file each application expects even if they are the same file path and file name. The only way to do this “correctly” is to swap the files out per application context. There are of course other solutions to DLL Hell from Microsoft including the Fusion technology and the Virtual Machine offerings each with it’s own strengths and weaknesses. &lt;/P&gt;
&lt;P&gt;Though there are a number of by design cases for the Windows Installer dialogs occurring during application execution, there is the occasional break such as you cite in your article. A sophisticated user can differentiate these cases by following the FAQ entry Every time I launch my application, Windows Installer performs an installation. How can I determine the cause of the on-demand installation? That FAQ item reads as follows 
&lt;BLOCKQUOTE&gt;&lt;B&gt;Q.&lt;/B&gt; Every time I launch my application, Windows Installer performs an installation. How can I determine the cause of the on-demand installation?&lt;BR&gt;&lt;B&gt;A.&lt;/B&gt; An easy way to determine the cause of an on-demand installation is to look in the application event log for MsiInstaller log messages of the form: 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;&lt;PRE&gt;Event Type: Warning
Event Source: MsiInstaller
Event ID: 1001
Description:
Detection of product '{000C1109-0000-0000-C000-000000000046}', feature 'Example' failed during request for component '{00030829-0000-0000-C000-000000000046}'
Event Type: Warning
Event Source: MsiInstaller
Event ID: 1004
Description:
Detection of product '{000C1109-0000-0000-C000-000000000046}', feature 'Example', component '{00030829-0000-0000-C000-000000000046}' failed. The resource 'C:\Progam Files\example\example.exe' does not exist.
&lt;/PRE&gt;
&lt;P&gt;The first message (with event ID 1001) states which component was being installed. The component listed here is the component named in the Component_ column of the Shortcut table for the particular shortcut.&lt;/P&gt;
&lt;P&gt;The second message (with event ID 1004) indicates which component failed detection. Improved event logging in Windows Installer 2.0 has updated the message so that in most cases, the message identifies the actual resource that resulted in the failed detection. The component with the missing or damaged keypath is the component that is triggering the reinstallation.&lt;/P&gt;
&lt;P&gt;In the example above, the reinstallation is triggered because the resource 'c:\Program Files\example\example.exe' does not exist. You would then need to find out why the keypath does not exist—in this case, the user deleted it. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;&lt;FONT color=#003399&gt;Robert Flaming&lt;/FONT&gt;&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399 size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486587" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Frequently+Asked+Questions/default.aspx">Frequently Asked Questions</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Where did my custom action permissions go?  Terminal Server is special.</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/23/484044.aspx</link><pubDate>Mon, 24 Oct 2005 08:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:484044</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/484044.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=484044</wfw:commentRss><description>&lt;P&gt;The other day a user complained that they were trying to donfigure Active Directory and their queries were intermittently getting access denied.&amp;nbsp; They had roughly identified the problem as having been related to the Windows 2003 server SP1 however they had not a clue why it worked intermittently.&amp;nbsp; I pecked at the edges saying it would be better not to reply on script custom actions as script custom actions are notorious for &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/debugging_custom_actions.asp"&gt;not being able to debugged&lt;/A&gt; and introduce an unneeded dependency which has lead some to advise against their use (such as &lt;a href="http://blogs.msdn.com/astebner/archive/2005/02/07/368917.aspx"&gt;astebner&lt;/A&gt; and &lt;a href="http://blogs.msdn.com/robmen/archive/2004/05/20/136530.aspx"&gt;robmen&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Handyman &lt;a href="http://blogs.msdn.com/heaths"&gt;Heath&lt;/A&gt; swung in and noted the log contained the reason for the failure: 
&lt;BLOCKQUOTE&gt;&lt;FONT face="courier new"&gt;Not impersonating action for per-machine TS install.&lt;/FONT&gt; &lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Carolyn then laid down the law:&lt;/P&gt;
&lt;P&gt;This is because you're performing a per-machine installation on Terminal Server. There's a section devoted to terminal server behavior in the Windows Installer documentation on MSDN. Of particular interest for you is the topic &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/using_custom_actions_on_a_terminal_server.asp"&gt;"Using custom actions from a terminal server"&lt;/A&gt;. 
&lt;BLOCKQUOTE&gt;
&lt;H2&gt;Using Custom Actions on a Terminal Server&lt;/H2&gt;This section describes the use of DLL, EXE, and Script custom actions only when all of the following conditions are true: 
&lt;OL&gt;
&lt;LI&gt;The installer package is being installed on Windows 2000 or later. &lt;/LI&gt;
&lt;LI&gt;The package is installed on a system hosting Terminal Services. In this case, the installer sets the TerminalServer property. &lt;/LI&gt;
&lt;LI&gt;The package is installed as a per-machine installation. &lt;/LI&gt;&lt;/OL&gt;If all of the preceding conditions apply, custom actions run in an environment similar to that which exists when an application is installed with no user logged-in. In this case, the following are true: 
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=red&gt;Deferred custom actions run in the context of the local system unless the action has the msidbCustomActionTypeTSAware attribute. This is true even if the custom action would normally impersonate the user on a system that was not a Terminal Server....&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;...&lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;So then the person with the problem asked "so if I set the type of the CA from 9222 to 9222 + 16384 we would be back to the original behavior and impersonating the calling user?"&lt;/P&gt;
&lt;P&gt;Which Carolyn of course answered with "Yes, on those platforms where msidbCustomActionTypeTSAware is supported/available."&lt;/P&gt;
&lt;P&gt;... and so we have yet another happy customer&lt;/P&gt;
&lt;P&gt;Now if I could only find some documentation or logging magic that would help call these out without the homework.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;Content credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Carolyn, MSI Team Dev Lead. You can get other Carolyn insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;&lt;FONT color=#003399&gt;Windows Installer Chat Archives&lt;/FONT&gt;&lt;/A&gt; 
&lt;LI&gt;Heaths, Microsoft DevDiv CPX Dev. You can get other Heath insights about developing for Windows Installer from the&amp;nbsp;&lt;a href="http://blogs.msdn.com/heaths"&gt;Heath's blog&lt;/A&gt;.&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;&lt;FONT color=#003399&gt;Robert Flaming&lt;/FONT&gt;&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399 size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=484044" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Billboard bug is fixed in MSI Vista</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/08/478491.aspx</link><pubDate>Sat, 08 Oct 2005 19:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:478491</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/478491.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=478491</wfw:commentRss><description>&lt;P&gt;We've got a couple of pings on a billboard bug that I thought I'd share in case others are seeing this problem.&lt;/P&gt;
&lt;H4&gt;Problem&lt;/H4&gt;
&lt;P&gt;In Windows Installer 2 billboards showed one after another smoothly during InstallFiles action. With Windows Installer version 3, billboards showed twice during the install. The first time, the billboards showed during generating script and the second time was as they were displayed normally as in Windows Installer 2.&lt;/P&gt;
&lt;H4&gt;Reason&lt;/H4&gt;
&lt;P&gt;In MSI 2.0 it was only the GenerateScript action that was sending an ActionStart message while the script was being generated, but now we’re sending the ActionStart message for each individual action that is authored in the .MSI package’s InstallExecute table, while we’re generating the execution script for it. This causes the UI handler to see new actions coming in, to start counting the billboards and - if there are any - to display them in response to progress messages sent by the service.&lt;/P&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;&lt;FONT color=#003399&gt;Robert Flaming&lt;/FONT&gt;&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399 size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478491" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Most frequent problem with the msi-fusion interaction? Incorrect authoring of strong name.</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/07/473320.aspx</link><pubDate>Sat, 08 Oct 2005 02:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:473320</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/473320.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=473320</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=4&gt;Question&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Most frequent problem with the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/assemblies.asp"&gt;msi-fusion&lt;/A&gt; interaction?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;Answer&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Incorrect authoring of strong name. This particularly crops up at uninstall time as the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiassemblyname_table.asp"&gt;MSIAssemblyName&lt;/A&gt; table ends up feeding the wrong identity to the Fusion API. This doesn't break at install because the Fusion API does not need to use the identity during installation. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;Specific Instance&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;After applying a Major Upgrade, assemblies from the previous version are remaining in the GAC. &amp;nbsp;The log shows the assemblies being removed. Log Excerpts:&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;FONT face="Courier New"&gt;Action 9:00:32: RemoveFiles. Removing files&lt;BR&gt;MSI (s) (80:74) [09:00:32:501]: Executing op: ProgressTotal(Total=5,Type=1,ByteEquivalent=175000)&lt;BR&gt;MSI (s) (80:74) [09:00:32:521]: Executing op: SetTargetFolder(Folder=C:\)&lt;BR&gt;MSI (s) (80:74) [09:00:32:551]: Executing op: FileRemove(,FileName=RTD.dll,,ComponentId={89D876CC-08E6-40BE-ADA1-60A06367E6EE})&lt;BR&gt;MSI (s) (80:74) [09:00:32:571]: &lt;FONT color=#ff0000&gt;&lt;STRONG&gt;delegating uninstallation of assembly file : RTD.dll to Fusion&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;MSI (s) (80:74) [09:00:32:591]: Executing op: FileRemove(,FileName=ReplView.dll,,ComponentId={310E6806-274C-452F-92A0-84616E49D1BF})&lt;BR&gt;MSI (s) (80:74) [09:00:32:631]: &lt;STRONG&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000&gt;delegating uninstallation of assembly file : ReplView.dll to Fusion&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;MSI (s) (80:74) [09:00:32:651]: Executing op: FileRemove(,FileName=PerformanceHealthCheck.dll,,ComponentId={51AE0E7A-D7FE-48FC-B02A-4DE0375902FD})&lt;BR&gt;MSI (s) (80:74) [09:00:32:661]: &lt;FONT color=#ff0000&gt;&lt;STRONG&gt;delegating uninstallation of assembly file : PerformanceHealthCheck.dll to Fusion&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;MSI (s) (80:74) [09:00:32:671]: Executing op: FileRemove(,FileName=DTClassLibrary.dll,,ComponentId={07047D05-CEB0-4EC5-B19F-E7F0BB5AFB3D})&lt;BR&gt;MSI (s) (80:74) [09:00:32:821]: &lt;FONT color=#ff0000&gt;&lt;STRONG&gt;delegating uninstallation of assembly file : DTClassLibrary.dll to Fusion&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;MSI (s) (80:74) [09:00:32:861]: Executing op: FileRemove(,FileName=System.Runtime.InteropServices.APIs.dll,,ComponentId={CCB66762-BEAF-49D1-B265-C6D70067862C})&lt;BR&gt;MSI (s) (80:74) [09:00:32:941]: &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;delegating uninstallation of assembly file : System.Runtime.InteropServices.APIs.dll to Fusion&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=4&gt;So Where's the ICE?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;An &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/internal_consistency_evaluators_ices.asp"&gt;ICE&lt;/A&gt; for this would break a bit of the mold for &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/internal_consistency_evaluators_ices.asp"&gt;ICE&lt;/A&gt;s in that it would need to check the image against the authoring in the msi. Were we to break this barrier, here's what you'd need to do. 
&lt;OL&gt;
&lt;LI&gt;Enumerate the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp"&gt;file table&lt;/A&gt; and look to determine which ones are managed assemblies. 
&lt;LI&gt;Extract the assembly identity from each managed assembly in the MSI 
&lt;LI&gt;Look in the MSI assembly name table to make sure that each identity you found has is also in this table. Any fewer is an error. Any ones you didn't find are also an error. &lt;/LI&gt;&lt;/OL&gt;There are metadata APIs for (1), and Fusion APIs for (2). It's a little ugly because there is a processorArchitecture field, which is new for Whidbey that you have to treat specially. &lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;Content credit also belongs to &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Alan, Microsoft Dev 
&lt;LI&gt;Carolyn, MSI Dev Lead.&amp;nbsp; You can get other Carolyn insights about developing for Windows Installer from the &lt;A href="http://msdn.microsoft.com/chats/transcripts/windows/default.aspx"&gt;Windows Installer Chat Archives&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=1&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: &lt;a href="http://blogs.msdn.com/rflaming"&gt;Robert Flaming&lt;/A&gt;]&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=1&gt;This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT size=1&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=473320" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Frequently+Asked+Questions/default.aspx">Frequently Asked Questions</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>Help Troubleshooing 'Error 2902. Operation ixfAssemblyCopy called out of sequence.'</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/04/476097.aspx</link><pubDate>Tue, 04 Oct 2005 09:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:476097</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/476097.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=476097</wfw:commentRss><description>&lt;H4&gt;Question&lt;/H4&gt;Can you help troubleshooting 'Error 2902. Operation ixfAssemblyCopy called out of sequence.'? 
&lt;H4&gt;Answer&lt;/H4&gt;The &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_error_messages.asp"&gt;2902 errors&lt;/A&gt; generally point to authoring issues. One case has been identified as authoring error wherein the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/installation_of_win32_assemblies.asp"&gt;win32 sxs components&lt;/A&gt; do not include a key path. For this case, adding a key path corrects the problem.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=476097" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item></channel></rss>