<?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 : Design Pointers</title><link>http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx</link><description>Tags: Design Pointers</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Integration Hurdles for EXE Custom Actions</title><link>http://blogs.msdn.com/windows_installer_team/archive/2007/10/20/integration-hurdles-for-exe-custom-actions.aspx</link><pubDate>Sat, 20 Oct 2007 17:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5548080</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/5548080.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=5548080</wfw:commentRss><description>&lt;P&gt;A while back, two sets of engineers were arguing whether simply calling an EXE custom action would be good enough for Windows Installer based package.&amp;nbsp; The first team with the EXE didn't want to do the work to move to Windows Installer but they really wanted the second team to take a dependency.&amp;nbsp; The team based on Windows Installer said the integration problems with calling an EXE was so great they would not integrate without a Windows Installer package.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;As an attempt at arbitrating the disagreement, it was requested the Window Installer team provide an analysis.&amp;nbsp; A quick paper was written to capture the analysis.&amp;nbsp; This paper has since been shared in other similar circumstances.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In a recent instance, Microsoft blogger &lt;A class="" href="http://blogs.msdn.com/astebner/" mce_href="http://blogs.msdn.com/astebner/"&gt;Aaron Stebner&lt;/A&gt; suggested this quick paper would make a good blog.&amp;nbsp; Here it is.&amp;nbsp; Hope it's useful ;^)&lt;/P&gt;
&lt;H2&gt;Integration Hurdles for EXE Custom Actions&lt;/H2&gt;
&lt;H3&gt;Overview and Scope&lt;/H3&gt;
&lt;P&gt;Windows Installer (MSI) architecture was designed to work best when all the installation behaviors are native to the Windows Installer. When the native behavior (called &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/Aa372022.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/Aa372022.aspx"&gt;Standard Actions&lt;/A&gt;) are insufficient, there is a way to provide extend behavior (called &lt;A class="" href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_actions.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_actions.asp"&gt;Custom Actions&lt;/A&gt;). Custom Actions come in various &lt;A class="" href="http://msdn.microsoft.com/library/en-us/msi/setup/summary_list_of_all_custom_action_types.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/summary_list_of_all_custom_action_types.asp"&gt;base types&lt;/A&gt; that are differentiated on the way the &lt;A class="" href="http://www.microsoft.com/technet/prodtechnol/windows2000pro/evaluate/featfunc/wispro.mspx" mce_href="http://www.microsoft.com/technet/prodtechnol/windows2000pro/evaluate/featfunc/wispro.mspx"&gt;Windows Installer service&lt;/A&gt; instantiates the custom action in the appropriate sandbox. Among the types of custom actions are &lt;A class="" href="http://msdn.microsoft.com/library/en-us/msi/setup/executable_files.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/executable_files.asp"&gt;executable files&lt;/A&gt; and &lt;A class="" href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;dynamic link libraries&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Bare custom actions are risky to the integrity of a Windows Installer base install and this document will consider the risks.&lt;/P&gt;
&lt;P&gt;This document will not dive deep into the architecture or the possibilities to improve the custom action architecture in the future. &lt;/P&gt;
&lt;H3&gt;Integration Hurdles&lt;/H3&gt;
&lt;P&gt;The installation integrity risk running EXE custom actions come in a number of varieties&lt;/P&gt;
&lt;P&gt;&amp;nbsp; 
&lt;TABLE class="" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;Problem&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;Mitigation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;EM&gt;(by consumer of EXE)&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Crash&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs can bring down the custom action sandbox&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Binary Dependency&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs can require technologies that are not in the system at the time of the install.&amp;nbsp; &lt;I&gt;Specific instance&lt;/I&gt;: MSXML custom actions required MFC 7 but it didn't exist on machines.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Load&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs can expect to load DLLs from the path but the path could be customized by the user on the machine.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Rights&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs can require more rights (e.g. admin) than the package thus breaking scenarios (per-user)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Logging&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs do not have access to the Windows Installer Log so there is no integrated troubleshooting.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that provides log path to EXE and puts the log next to or into the Windows Installer log)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;UI&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXE do not have access to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uilevel.asp"&gt;UILevel&lt;/A&gt; so they do not know &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/determining_ui_level_from_a_custom_action.asp"&gt;whether it's OK to display UI&lt;/A&gt;.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that reads &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uilevel.asp"&gt;UILevel&lt;/A&gt; and alters command line)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Progress&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs do not have &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/adding_custom_actions_to_the_progressbar.asp"&gt;access to the widows installer progress bar&lt;/A&gt;.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, add entries to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/reservecost_table.asp"&gt;ReserveCost&lt;/A&gt; table)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Hangs&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXE may hang and neither the Windows Installer nor the user has no way of knowing whether the install is hung or just taking a long time.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls &lt;A href="http://msdn.microsoft.com/library/en-us/dllproc/base/createprocess.asp"&gt;CreateProcess&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/en-us/dllproc/base/waitformultipleobjectsex.asp"&gt;WaitForMultipleObjects&lt;/A&gt;)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Costing&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXE do not have any way of being integrated into the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/file_costing.asp"&gt;Windows Installer costing&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/adding_custom_actions_to_the_progressbar.asp"&gt;add ticks to the progress bar&lt;/A&gt;)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Rollback&lt;/P&gt;
&lt;P&gt;- rollback behavior&lt;BR&gt;- decision when to execute rollback (did failure occur in the FWD case thus calling the Backward case is extraneous?)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXE do not support &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/rollback_installation.asp"&gt;rollback&lt;/A&gt;.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls EXE uninstall if exists)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Transparency and Predictability&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs are not &lt;A href="http://msdn.microsoft.com/library/en-us/vsintro7/html/vxgrfcustomactiondataproperty.asp"&gt;data driven from the contents&lt;/A&gt; of the MSI thus are not transparent to users, especially admins.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Uninstall&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs do not support &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uninstalling_custom_actions.asp"&gt;uninstall&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls EXE uninstall if exists)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Uninstall Rollback&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs do not support &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uninstalling_custom_actions.asp"&gt;uninstall&lt;/A&gt; rollback&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls EXE install)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Repair/Resiliency&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs do not support &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstalling_a_feature_or_application.asp"&gt;repair&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls EXE install again)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;First Run&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs mix per machine installation with per-user installation that should be &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/initializing_an_application.asp"&gt;invoked at first run&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Error Codes&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs do not provide return codes or have return codes that do not match the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_action_return_values.asp"&gt;custom action return code&lt;/A&gt; expectations.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that interprets errors returned from the EXE and &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_action_return_values.asp"&gt;returns the appropriate value&lt;/A&gt;) &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Watson&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXE failures are difficult to map to Watson buckets (for teams that have implemented Setup Watson)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that initializes Setup Watson with the needed context to differentiate EXE error)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;PSS Costs&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;When an EXE fails, the supports costs are absorbed by the enclosing product&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that records needed context to differentiate EXE error)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Localization&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Does installation or manipulation by the EXE cause strings to be written to the system?&amp;nbsp; If yes, how are the strings differentiated?&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Selection&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Some EXEs have different levels that can be installed (Minimum, Full).&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that maps UI or feature selection to different levels in EXE)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Terminal Server and SMS&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Bad EXEs do not run &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/using_custom_actions_on_a_terminal_server.asp"&gt;correctly on Terminal Server&lt;/A&gt; where there is no user logged in and will not have a user hive&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Group Policy (Publishing, assignment)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;&amp;lt;missing this context&amp;gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Debugging&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;There is no way to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/debugging_custom_actions.asp"&gt;debug custom actions&lt;/A&gt; in EXE from MSI.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that uses &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/debugging_custom_actions.asp"&gt;dll debugging&lt;/A&gt; then alter EXE call from inside &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt;)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Access to Database&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs are unable to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/accessing_the_current_installer_session_from_inside_a_custom_action.asp"&gt;access the database&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that uses dll method to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/accessing_the_current_installer_session_from_inside_a_custom_action.asp"&gt;access the database&lt;/A&gt;)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Run From Source or Cache&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs are unable to be configured to &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/addsource.asp"&gt;run from source&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Servicing&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs are more difficult to confirm they contain the right security fixes when servicing&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Help&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs that contain 2.0 User Education integration may not have MSI's namespace parents configured at the time they are called&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, move the EXE to a different location in the sequence after the html help custom actions)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Events&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs that produce events during install will appear outside the MSI context&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Customization&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Numerous third party tools exist to customize an install to the needs of a particular specialized user (usually LORGs)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;File In Use&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;There is no way for a custom action to inform the user that files they want to manipulate are in use&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Pending File Renames, File in Use, and Rollback&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;If a EXE custom action replaces files that are held in use and a MoveFileEx causes those files to end up in Pending File Renames, then the install rolls back it's possible that the files will still be changed on the next boot.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Detection of When to Install (Resiliency v Rollback)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;A rollback during repair or reinstall could cause premature removal of a EXE install that existed on the machine before MSI was installed.&amp;nbsp; If one implements rollback, one has to implement foolproof detection for existing installs of the component and &lt;I&gt;not&lt;/I&gt; run the EXE package if the same version of EXE is already on the machine.&amp;nbsp; Otherwise, a cancel or failure in the MSI could cause a preexisting installation of the EXE component to be removed.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Reboot&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;If the EXE requires a reboot, there is no way to communicate the need for the REBOOT to the MSI&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Cancel&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;As EXEs can not call &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiprocessmessage.asp"&gt;MsiProcessMessage&lt;/A&gt;, they are unable to respond to the cancel button.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None (best effort, build &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dynamic_link_libraries.asp"&gt;DLL&lt;/A&gt; that calls &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiprocessmessage.asp"&gt;MsiProcessMessage&lt;/A&gt;)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;Watson&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;EXEs that crash may cause a Watson dialog during the install&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;None&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H3&gt;Test Scenarios&lt;/H3&gt;
&lt;P&gt;When testing the MSI that contains this EXE, one needs to test the following &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Deployment technologies&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Group Policy Software Distribution&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Publishing&lt;/LI&gt;
&lt;LI&gt;Assignment&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;SMS deployment&lt;/LI&gt;
&lt;LI&gt;Install from network share/media&lt;/LI&gt;
&lt;LI&gt;Install from local cache&lt;/LI&gt;
&lt;LI&gt;Hard drive imaging&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Customer segments&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Retail install&lt;/LI&gt;
&lt;LI&gt;OEM pre-install&lt;/LI&gt;
&lt;LI&gt;Enterprise deployment&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;User types&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;No user (install during winlogon, install by SMS agent) - these will not have a user hive&lt;/LI&gt;
&lt;LI&gt;Lockdown user&lt;/LI&gt;
&lt;LI&gt;Regular user&lt;/LI&gt;
&lt;LI&gt;LUA without registry virtualization&lt;/LI&gt;
&lt;LI&gt;Admin user&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&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=5548080" 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/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>A starting point for Windows Installer 4.5 embedded UI?</title><link>http://blogs.msdn.com/windows_installer_team/archive/2007/09/07/a-starting-point-for-windows-installer-4-5-embedded-ui.aspx</link><pubDate>Sat, 08 Sep 2007 07:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4823999</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/4823999.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=4823999</wfw:commentRss><description>&lt;P&gt;A few questions have come in asking for a starting point for building a Windows Installer 4.5 Embedded UI.&lt;/P&gt;
&lt;H2&gt;Feature Design&lt;/H2&gt;
&lt;P&gt;As we put together the ideas behind the Embedded UI features, we aspired to provide a simple extension off the preexisting features in the Windows Installer platform. 
&lt;BLOCKQUOTE&gt;
&lt;H3&gt;Simple Starting Idea&lt;/H3&gt;
&lt;P&gt;When we started designing this feature, our target scenario went something like this: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;An ISV has spent a lot of time building a really cool external UI for their Windows Installer based experience users have a habit of trying to invoke the .MSI file directly rather than the setup.exe bootstrapper file. Generally this ISV puts up an plain dialog "Please invoke [ProductName] from the setup.exe file next to this file.". It wastes the users time and hurts the package's customer satisfaction.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;Over time, we added nuances to this feature but our base assumption was that the ISV was the type of ISV that was ready to invest into an external UI. 
&lt;H3&gt;Guiding Principle: what would an external UI do?&lt;/H3&gt;
&lt;P&gt;With the simple idea that a package author just wanted to put their custom UI inside the package, most of the complexity we referenced back to our guiding principle: what would an external UI do? We even considered a "zero cost migration from external UI" requirement but it didn't fit scenarios or the ISV persona who was already prepared to build custom code to get their custom UI experience. A little more code was acceptable as long as reuse was in reach. &lt;/P&gt;
&lt;H3&gt;Friends and Foundations&lt;/H3&gt;
&lt;P&gt;One of the other early tests we had for ourselves was whether we thought the friends of Windows Installer could use this feature with the foundations already in place. Some of our bigger ISV and Tools Vendor friends already had custom external UI handlers so we wanted the cost for them to be low to build from their foundation. For smaller or newer ISV or Tools Vendors, we scouted our documentation and samples for a viable starting point for their foundation.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;A Starting Point&lt;/H2&gt;
&lt;P&gt;For an ISV without a preexisting starting point, here's what we thought you'd use to build start from.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;H3&gt;First think of DLL custom action&lt;/H3&gt;
&lt;P&gt;When custom actions are needed, &lt;A href="http://msdn2.microsoft.com/en-us/library/aa368075.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa368075.aspx"&gt;DLL custom actions&lt;/A&gt; are the way to do. They provide the capacity for the maximum integration with our architecture, &lt;A href="http://msdn2.microsoft.com/en-us/library/aa371614.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa371614.aspx"&gt;including message passing for UI and logging&lt;/A&gt;, ability to &lt;A href="http://msdn2.microsoft.com/en-us/library/aa367457.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa367457.aspx"&gt;read the database in the session&lt;/A&gt;, and the ability to &lt;A href="http://msdn2.microsoft.com/en-us/library/aa368069.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa368069.aspx"&gt;request being executed NoImpersonated&lt;/A&gt;. Further most of the tools provide some starting framework to get an ISV off the ground with a DLL custom action. For us, considering the Embedded UI handler as a specialized version of a DLL custom action allowed us to reuse our custom action sandbox as the embedded UI sandbox.&lt;/P&gt;
&lt;H3&gt;Second think of external UI message processing&lt;/H3&gt;
&lt;P&gt;Once the Embedded UI DLL has been booted, it needs to do it's work. The next thing a UI handler will need is to process messages. Although we do not currently have a external UI sample in the Windows Installer portion of the Platform SDK, we do have some code samples in the MSDN documentation. Of these, there is sample code for &lt;A href="http://msdn2.microsoft.com/en-us/library/aa370053.aspx"&gt;MsiSetExternalUI&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/en-us/library/bb309215.aspx"&gt;MsiSetExternalUIRecord&lt;/A&gt;. Of the messages, progress is the one that will occur most frequently so &lt;A href="http://msdn2.microsoft.com/en-us/library/aa368786.aspx"&gt;we have a sample for that&lt;/A&gt;. Once the progress sample is in place, the work remaining is to expand the number of case statements handled to match the list of message types from &lt;A href="http://msdn2.microsoft.com/en-us/library/aa369545.aspx"&gt;INSTALLUI_HANDLER_RECORD&lt;/A&gt;. These case statements will each need to decide whether further parsing is required and we've documented that too at &lt;A href="http://msdn2.microsoft.com/en-us/library/aa370573.aspx"&gt;Parsing Windows Installer Messages&lt;/A&gt;. Sometimes the message parsing is going to require communicating a message back to the Windows Installer which you can learn to do with &lt;A href="http://msdn2.microsoft.com/en-us/library/aa371248.aspx"&gt;Returning Values from an External UI Interface Handler&lt;/A&gt;. &lt;/P&gt;
&lt;H3&gt;Third switch to your favorite User Interface design environment&lt;/H3&gt;
&lt;P&gt;The Windows Installer UI tables are from the Wizard 97 era of UI guidelines. User Interface design has some a long way in the 10 years since and the Windows Installer UI tables have not tried to keep up all that much. The Windows Installer team has advised ISVs seriously consider building their own favorite UI when they reach the limits of the Windows Installer. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;How about a sample?&lt;/H2&gt;
&lt;P&gt;Sorry, we don't have one yet but we do have it in the list of feedback that we plan to work on after we finish the engine work itself.&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=4823999" width="1" height="1"&gt;</description><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/Beta/default.aspx">Beta</category><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/MSI4.5/default.aspx">MSI4.5</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 and Restart Manager: MSI Files-In-Use V2</title><link>http://blogs.msdn.com/windows_installer_team/archive/2006/12/11/windows-installer-and-restart-manager-msi-files-in-use-v2.aspx</link><pubDate>Tue, 12 Dec 2006 00:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1262328</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/1262328.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=1262328</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Introduction&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&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;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Files-In-Use functionality is among the countless services that Windows Installer exposes for setup authors to leverage for their application install/maintenance. This functionality lets setup authors display the processes that hold on to files that would be updated by this install. The user would want to shut those processes before continuing with the install to ensure that the install wouldn’t require a reboot. The current Files-In-Use mechanism involves enumerating the HKEY_PERFORMANCE_DATA key using registry API for information on processes and the PE images that they have held in-use. This works well in scenarios where the process holding the file in use has a visible window that the user can shut down.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Usage of the new Restart Manager API’s will allow Windows Installer to display processes such as: system services, tray applications or applications that have no visible window that require shutting down to avoid a reboot. Additionally, Restart Manager provides additional functionality above-and-beyond enhanced files in use detection, including: &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;·&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Shutting down of all or selected processes. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;·&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Automatic restart of processes that were shutdown to install the in-use files.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;·&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Ability to join a currently running Restart Manager session to consolidate shutdown/reboot across multiple installations.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;·&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Symbol; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Appilications that had been shut down, have the opportunity to be restarted to a state that they were before being shut down.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Terminology&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Sessions&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;. Sessions in this blog refer to Terminal Service sessions. On Vista services run in session 0, while users log in to different non-zero sessions.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Client&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;. Client in this blog refers to the invoker of the install. Remember that while an install could be invoked by a call to MsiInstallProduct, MsiApplyMultiplePatches, etc., the install (updating the system) is actually performed by the Windows Installer service. This is a different process running in session 0 (on Vista).&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Comparison of Pre-Vista Files-In-Use Vs Vista Files-In-Use&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 3"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Basic UI&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;A new dialog resource is added to Windows Installer on Vista that is displayed when running in basic UI mode. This dialog, unlike its legacy counterpart displays the processes that are holding onto files-in-use. Additionally, this dialog will also provide users with the option to shutdown/restart these processes to avoid the reboot. The figure&amp;nbsp;below compares the basic UI files-in-use dialog boxes on Pre-Vista and Vista. Note how due to the better detection mechanism of restart manager, we are able to display a service that needs to be stopped for this install to actually avoid a reboot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;IMG title="Basic UI" style="WIDTH: 725px; HEIGHT: 450px" height=450 alt="Basic UI" src="http://msidev.members.winisp.net/BasicUI.jpg" width=725 mce_src="http://msidev.members.winisp.net/BasicUI.jpg"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 3"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Full UI&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;When run in full UI, to leverage the restart manager’s abilities completely, the package author could provide a new &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirmfilesinuse_dialog.asp"&gt;&lt;SPAN style="COLOR: blue"&gt;MsiRMFilesInUse&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="COLOR: #7b4b23"&gt; dialog box. See the&amp;nbsp;image below&amp;nbsp;for a comparison of how the old files-in-use dialog looks on XPSP2 and how the new RM files-in-use dialog on Vista looks like.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;SPAN style="COLOR: #7b4b23"&gt;&lt;IMG title="Full UI" style="WIDTH: 650px; HEIGHT: 580px" height=580 alt="Full UI" src="http://msidev.members.winisp.net/fullui.jpg" width=650 mce_src="http://msidev.members.winisp.net/fullui.jpg"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;SPAN style="COLOR: #7b4b23"&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;External UI&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Pre-Vista, external UI handlers could listen to files-in-use messages using the INSTALLLOGMODE_FILESINUSE flag. These setups would then receive a INSTALLMESSAGE_FILESINUSE message with list of processes that need to be shutdown for the install to not require a reboot. These setups will continue to receive these messages even on Vista. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;New setups, however, will get chance to leverage the Windows Installer-Restart Manager interaction to shutdown and restart those processes automatically. Such setups could listen to the INSTALLMESSAGE_RMFILESINUSE message after they subscribe to it in their call to MsiSetExternalUI by specifying INSTALLLOGMODE_RMFILESINUSE in the flags to this call. The table below summarizes Windows Installer’s response to various return values from an external UI that handles the INSTALLMESSAGE_RMFILESINUSE message&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt" cellSpacing=0 cellPadding=0 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="HEIGHT: 18.4pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1.5pt solid; HEIGHT: 18.4pt; mso-border-alt: solid windowtext .5pt; mso-border-bottom-alt: solid windowtext 1.5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Return Value&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1.5pt solid; HEIGHT: 18.4pt; mso-border-alt: solid windowtext .5pt; mso-border-bottom-alt: solid windowtext 1.5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Windows Installer’s action&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext 1.5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;IDOK&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext 1.5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Will request Restart Manager to shut down and restart the applications that hold files in use&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;IDCANCEL&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Will cancel the installation&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;IDIGNORE&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;The installation will go on, although a reboot will be required at the end&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;IDNO&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;If the package has MsiRMFilesInUse dialog then 1610 Message will be sent. If MsiRMFilesInUse dialog is not present then INSTALLMESSAGE_FILESINUSE message will be sent to the UI handlers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;IDRETRY&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Will cause Windows Installer to send the legacy INSTALLMESSAGE_FILESINUSE message to the UI handlers&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.2in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=115&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;-1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 4.7in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=451&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: JA"&gt;Will be treated as an error and will end the installation&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 3"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;No UI&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;When a silent install is performed, Windows Installer will use restart manager to detect the processes that need to be shutdown to mitigate the reboot and will request restart manager to automatically shutdown these processes. Upon completion of the update, Windows Installer will request restart manager to start up the processes.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Controlling Windows Installer’s interaction with Restart Manager&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer provides the following properties and policy to let setup authors and IT admins fine tune their setup’s behavior:&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/ms707500.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;MSIRESTARTMANAGERCONTROL&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT color=#7b4b23&gt;: This property specifies whether the Windows Installer package uses the Restart Manager or FilesInUse Dialog functionality.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/ms707504.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;MSIRMSHUTDOWN&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT color=#7b4b23&gt;: This property determines how applications or services that are affected by an update should be shut down while a reboot is being mitigated.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/ms706141.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;MSIDISABLERMRESTART&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT color=#7b4b23&gt;: This property determines whether applications or services that are affected by an update are restarted when a reboot is being mitigated by Windows Installer's interaction with Restart Manager&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;FONT color=#7b4b23&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/ms702928.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;DisableAutomaticApplicationShutdown&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT color=#7b4b23&gt;: This policy specifies whether Windows Installer uses the Restart Manager or FilesInUse Dialog functionality.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Custom Actions and Restart Manager&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Setup authors could add additional resources that need to be released as part of the setup using the restart manager session handle that Windows Installer provides to them via MsiRestartManagerSessionKey property. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Custom actions can query the value of the MsiRestartManagerSessionKey property and use it in a call to RmJoinSession API. Custom actions that call RmJoinSession API must call RmEndSession API too once they are finished adding resources. Also, custom action should not call the RmShutdownApplications, RmGetAffectedApplications and RmRestartApplications API directly and should just use the restart manager’s resource addition/filtering API.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Since all files-in-use detection and process shutdown would be completed in InstallValidate action, the MsiRestartManangerSessionKey property will be cleared in Windows Installer’s InstallValidate action.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer-Restart Manager Interaction in Detail&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;1.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;During engine initialization, if Windows Installer’s interaction with RM is not disabled by a property/policy the service starts up an RM session and sets the &lt;I style="mso-bidi-font-style: normal"&gt;MsiRestartManangerSessionKey&lt;/I&gt; property.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;2.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;During costing, Windows Installer adds file resources that it wants RM to monitor.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;3.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;During InstallValidate, Windows Installer requests RM to find out what all processes need to be shutdown for the install to succeed. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;a.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If RM detects that the file is held in use by a critical process or the client of this setup or a custom action server or by the Windows Installer service itself then a reboot can not be mitigated. In such a case:&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1.5in; TEXT-INDENT: -9pt; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;i.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;For legacy MSI packages it will continue the install. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1.5in; TEXT-INDENT: -9pt; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;ii. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;For new MSI packages with MsiRMFilesInUse dialog it will send out 1610 error message.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;b.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If the package is authored such that the services detected by RM would be shutdown because of the authoring of the Service* tables then those services will not be displayed in the files-in-use dialogs.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;4.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;It then sends a message to the client requesting it to see if it can shutdown these applications. Upon receiving this message, the client then interacts with RM and compiles a list of processes that it can shutdown. If in this process:&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;a.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;RM finds that a process is being run in another user’s session then, it informs the caller that it cannot shut it down.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;b.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;RM finds that the client does not have enough credentials to shutdown the process then, it informs the caller that it cannot shut it down.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;5.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If the client detects any reboot, it informs the service of this. The service then warns the user that a reboot might be needed (as outlined in 3.a.i and 3.a.ii).&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;6.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If the client does not detect any reboot then the client sends the INSTALLMESSAGE_RMFILESINUSE message to:&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;a.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;External UI handlers (if one exists that has specified using the INSTALLLOGMODE_FILESINUSE flag).&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;b.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If External UI handlers do not handle the message, it is forwarded to the internal UI handler.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;7.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Based on how the UI handlers respond to the INSTALLMESSAGE_RMFILESINUSE message, the service would continue its processing accordingly. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;8.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If the UI handler requests Windows Installer to shut down the processes:&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;a.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer service will request RM to shutdown any services that might have to be shutdown. If there are no services to shutdown then, nothing is done.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormalCxSpMiddle style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-add-space: auto"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;b.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer service then requests the client to shutdown the required processes.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;The way RM shuts down these processes can be controlled using the MSIRMSHUTDOWN property.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;9.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If RM could not shutdown any of the processes, then Windows Installer displays 1611 message if the package has MsiRMFilesInUse dialog. If not, no message is displayed and the install continues (but a reboot might be needed). RM might not shutdown a process, if the process doesn’t respond to WM_ENDSESSION or WM_CLOSE messages or if it is a service, it does not respond to SCM requests.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;10.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If RM succeeds in shutting down the processes, then the install will not require any reboot.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;11.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If after Step 7, UI handlers request the service to send the INSTALLMESSAGE_FILESINUSE message, the service responds to the request.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;12.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 7pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Garamond; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Upon completion of the install, Windows Installer Service requests RM to restart all the services that it shutdown, while the client requests RM to restart all the applications that registered using the &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-gb/library/ms714886.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;RegisterApplicationRestart&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="COLOR: #7b4b23"&gt; API.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer-Restart Manager-UAC&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;During non-GP (group policy) based first-time installs of non-UAC compliant MSI packages, Windows Installer interacts with UAC to obtain admin credentials before performing an install. Once, those credentials are obtained they are used through out the install. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 3"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Shutting down elevated processes&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If during this install, any elevated processes are detected in the same session as the Windows Installer service, they will be shutdown by the Windows Installer service using the credentials provided by the user. If however, there was any elevated process running in the user’s session (different from the session that Windows Installer service is running), then the user will not be able to shut down those elevated processes because, the service cannot pass on credentials of the elevated process to an un-trusted client. &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;So, in a nutshell Windows Installer cannot mitigate reboots caused by elevated processes. However, this is possible if RM lets its callers shutdown processes across sessions. This is a work in progress that would hopefully be addressed post-Vista.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 3"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Shutting down services while applying a digitally signed patch&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Windows Installer will not prompt users for elevated credentials when a patch is digitally signed and its signature recognized by the original MSI in its Digital* tables. In this case, Windows Installer service does not have the elevated admin credentials to stop services that are not part of the MSI package. So, it will not be able to shutdown those services. If however, the package is authored correctly then the services that the MSI cares about will be stopped before the files carried by it are updated, thereby mitigating the reboot.&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 10pt 0in 0pt; LINE-HEIGHT: normal; mso-outline-level: 2"&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 13.5pt; COLOR: #4f81bd; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;How does my application restart in its old state after the update?&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 18pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; COLOR: #7b4b23; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;When Windows Installer requests restart manager to shutdown applications, restart manager sends out WM_QUERYENDSESSION, WM_ENDSESSION, WM_CLOSE respectively to GUI applications. When these applications receive these messages, they have the opportunity to save any user data and/or application state information to exit gracefully. This ability for applications to save their state is informally termed as freeze-dry. Applications that register with restart manager using the RegisterApplicationRestart API would be restarted when Windows Installer is done with the install and requests RM to restart all the applications that were shutdown and were registered with it. When these applications are restarted it would appear to the user that they were revived from their frozen state; hence the name: freeze-dry. Read the &lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/aa373652.aspx"&gt;&lt;SPAN style="COLOR: blue"&gt;Guidelines for Applications and Services&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="COLOR: #7b4b23"&gt; section on MSDN to learn more on how to support this cool new feature in your applications.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;SPAN style="COLOR: #7b4b23"&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: Hemchander Sannidhanam]&lt;/FONT&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;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1262328" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Restart Manager video available on Channel 9</title><link>http://blogs.msdn.com/windows_installer_team/archive/2006/12/04/restart-manager-video-available-on-channel-9.aspx</link><pubDate>Mon, 04 Dec 2006 21:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1206688</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/1206688.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=1206688</wfw:commentRss><description>&lt;P&gt;Hello everyone --&lt;/P&gt;
&lt;P&gt;As many of you know, one of the great new features Windows Installer supports on Windows Vista is Restart Manager. I just ran across a video on &lt;A class="" title="Channel 9" href="http://channel9.msdn.com/Showpost.aspx?postid=251492" target=_blank mce_href="http://channel9.msdn.com/Showpost.aspx?postid=251492"&gt;Channel 9&lt;/A&gt; that provides a lot of good information on how to make your application "Restart Manager Aware."&amp;nbsp;Good viewing if you are planning on supporting Restart Manager in your installer and you want to know what you need to do in your application to make a seamless experience.&lt;/P&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: Tyler Robinson]&lt;/FONT&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;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;.&lt;/FONT&gt; &lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1206688" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Check out the UAC video on Channel 9</title><link>http://blogs.msdn.com/windows_installer_team/archive/2006/12/01/check-out-the-uac-video-on-channel-9.aspx</link><pubDate>Fri, 01 Dec 2006 22:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1186171</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/1186171.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=1186171</wfw:commentRss><description>&lt;P&gt;Channel 9 did an interview with Steve Hiskey and Jon Schwartz on the UAC team. Check out the video&lt;A class="" title="UAC Video" href="http://channel9.msdn.com/Showpost.aspx?postid=255622" target=_blank mce_href="http://channel9.msdn.com/Showpost.aspx?postid=255622"&gt; here&lt;/A&gt; if you want to learn more about UAC.&lt;/P&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT color=#969696 size=1&gt;[Author: Tyler Robinson]&lt;/FONT&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;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#003399&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;.&lt;/FONT&gt; &lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1186171" width="1" height="1"&gt;</description><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 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>Authoring to Windows Installer 4.0 Features mentioned at PDC 2005</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/11/03/488945.aspx</link><pubDate>Fri, 04 Nov 2005 08:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:488945</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/488945.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=488945</wfw:commentRss><description>As Tyler &lt;A href=""&gt;recently mentioned&lt;/A&gt;, you can find the Professional Developers Conference 2005 &lt;A href="http://microsoft.sitestream.com/PDC05/FUN/FUN222_files/Default.htm"&gt;session&lt;/A&gt; and &lt;A href="http://microsoft.sitestream.com/PDC05/FUN/FUN222_files/Botto_files/FUN222_Robinson.ppt"&gt;presentation&lt;/A&gt; of the Windows Installer 4.0. Here's a preliminary view of how to author to these features. &lt;I&gt;Note: This documentation is preliminary and is subject to change.&lt;/I&gt; 
&lt;H4&gt;Restart Manager Support&lt;/H4&gt;
&lt;P&gt;As Tyler presented in the slide titled "Windows Installer 4.0: Fewer Reboots", Restart Manager support in MSI just requires MsiRMFilesInUse be present in the package when installing on Windows Vista. This dialog looks a lot like the FilesInUse dialog with a couple of radio buttons added under the list box to represent the new Restart Manager Option along with the fallback option to the old behavior.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/control_table.asp"&gt;Control Table&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Dialog_&lt;/TH&gt;
&lt;TH&gt;Control&lt;/TH&gt;
&lt;TH&gt;Type&lt;/TH&gt;
&lt;TH&gt;X&lt;/TH&gt;
&lt;TH&gt;Y&lt;/TH&gt;
&lt;TH&gt;Width&lt;/TH&gt;
&lt;TH&gt;Height&lt;/TH&gt;
&lt;TH&gt;Attributes&lt;/TH&gt;
&lt;TH&gt;Property&lt;/TH&gt;
&lt;TH&gt;Text&lt;/TH&gt;
&lt;TH&gt;Control_Next&lt;/TH&gt;
&lt;TH&gt;Help&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;DlgLine&lt;/TD&gt;
&lt;TD&gt;Line&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;234&lt;/TD&gt;
&lt;TD&gt;294&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;Banner&lt;/TD&gt;
&lt;TD&gt;Bitmap&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;374&lt;/TD&gt;
&lt;TD&gt;44&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;NewBinary1&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;DlgDesc&lt;/TD&gt;
&lt;TD&gt;Text&lt;/TD&gt;
&lt;TD&gt;21&lt;/TD&gt;
&lt;TD&gt;23&lt;/TD&gt;
&lt;TD&gt;292&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;65539&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Some files that need to be updated are currently in use.&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;DlgTitle&lt;/TD&gt;
&lt;TD&gt;Text&lt;/TD&gt;
&lt;TD&gt;13&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;292&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;
&lt;TD&gt;65539&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;{&amp;amp;MSSansBold8}Files in Use&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;DlgText&lt;/TD&gt;
&lt;TD&gt;Text&lt;/TD&gt;
&lt;TD&gt;21&lt;/TD&gt;
&lt;TD&gt;49&lt;/TD&gt;
&lt;TD&gt;348&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;The following applications are using files that need to be updated by this setup.&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;BannerLine&lt;/TD&gt;
&lt;TD&gt;Line&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;44&lt;/TD&gt;
&lt;TD&gt;374&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;RadioButtonGroup1&lt;/TD&gt;
&lt;TD&gt;RadioButtonGroup&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;187&lt;/TD&gt;
&lt;TD&gt;343&lt;/TD&gt;
&lt;TD&gt;40&lt;/TD&gt;
&lt;TD&gt;16777219&lt;/TD&gt;
&lt;TD&gt;ShutdownOption&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;List&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;List&lt;/TD&gt;
&lt;TD&gt;ListBox&lt;/TD&gt;
&lt;TD&gt;21&lt;/TD&gt;
&lt;TD&gt;66&lt;/TD&gt;
&lt;TD&gt;331&lt;/TD&gt;
&lt;TD&gt;118&lt;/TD&gt;
&lt;TD&gt;7&lt;/TD&gt;
&lt;TD&gt;FileInUseProcess&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;PushButton&lt;/TD&gt;
&lt;TD&gt;228&lt;/TD&gt;
&lt;TD&gt;244&lt;/TD&gt;
&lt;TD&gt;66&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;Cancel&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;Cancel&lt;/TD&gt;
&lt;TD&gt;PushButton&lt;/TD&gt;
&lt;TD&gt;299&lt;/TD&gt;
&lt;TD&gt;244&lt;/TD&gt;
&lt;TD&gt;66&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Cancel&lt;/TD&gt;
&lt;TD&gt;RadioButtonGroup1&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/controlevent_table.asp"&gt;ControlEvent Table&lt;/A&gt; 
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Dialog_&lt;/TH&gt;
&lt;TH&gt;Control_&lt;/TH&gt;
&lt;TH&gt;Event&lt;/TH&gt;
&lt;TH&gt;Argument&lt;/TH&gt;
&lt;TH&gt;Condition&lt;/TH&gt;
&lt;TH&gt;Ordering&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;EndDialog&lt;/TD&gt;
&lt;TD&gt;Return&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;RMShutdownAndRestart&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;ShutdownOption="ShutdownOption1"&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;Cancel&lt;/TD&gt;
&lt;TD&gt;EndDialog&lt;/TD&gt;
&lt;TD&gt;Exit&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/dialog_table.asp"&gt;Dialog Table&lt;/A&gt; 
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Dialog&lt;/TH&gt;
&lt;TH&gt;HCentering&lt;/TH&gt;
&lt;TH&gt;VCentering&lt;/TH&gt;
&lt;TH&gt;Width&lt;/TH&gt;
&lt;TH&gt;Height&lt;/TH&gt;
&lt;TH&gt;Attributes&lt;/TH&gt;
&lt;TH&gt;Title&lt;/TH&gt;
&lt;TH&gt;Control_First&lt;/TH&gt;
&lt;TH&gt;Control_Default&lt;/TH&gt;
&lt;TH&gt;Control_Cancel&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MsiRMFilesInUse&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;374&lt;/TD&gt;
&lt;TD&gt;266&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;[ProductName]&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;OK&lt;/TD&gt;
&lt;TD&gt;Cancel&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/property_table.asp"&gt;Property Table&lt;/A&gt; 
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Property&lt;/TH&gt;
&lt;TH&gt;Value&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ShutdownOption&lt;/TD&gt;
&lt;TD&gt;ShutdownOption1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/radiobutton_table.asp"&gt;RadioButton Table&lt;/A&gt; 
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Property&lt;/TH&gt;
&lt;TH&gt;Order&lt;/TH&gt;
&lt;TH&gt;Value&lt;/TH&gt;
&lt;TH&gt;x&lt;/TH&gt;
&lt;TH&gt;Y&lt;/TH&gt;
&lt;TH&gt;Width&lt;/TH&gt;
&lt;TH&gt;Height&lt;/TH&gt;
&lt;TH&gt;Text&lt;/TH&gt;
&lt;TH&gt;Help&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ShutdownOption&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;331&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;Automatically close all applications and attempt to restart them after setup is complete.&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ShutdownOption&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;21&lt;/TD&gt;
&lt;TD&gt;322&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;Do not close applications. (A reboot will be required.)&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;Elevation Privleges Not Required&lt;/H4&gt;
&lt;P&gt;As Tyler presented in the slide titled "What's new in MSI: UAP Elevation and Installs and Patches", you can set the msidbSumInfoSourceTypeLUAPackage bit in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/summary_information_stream.asp"&gt;Summary Information Stream&lt;/A&gt; of a MSI and prevent the Windows Installer from invoking the UAP elevation prompt. To do this, one just needs to set the 4th position (0x08) in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/word_count_summary.asp"&gt;Word Count property&lt;/A&gt;. You can do this with the Windows Installer SDK tool &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msiinfo_exe.asp"&gt;msiinfo.exe&lt;/A&gt;. As an example, here's the command and output before setting the bit&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new"&gt;

c:\&amp;gt;msiinfo product.msi

ClassId = {000C1084-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Installation Database
[ 3][/j] Subject = Testing
[ 4][/a] Author = Microsoft Corp.
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact:  Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 9][/v] Revision = {62B8B42B-9D2E-49C2-A791-C90F212940B8}
[12][/r] Created = 2005/10/25 23:00:48
[13][/q] LastSaved = 2005/10/25 23:00:48
[14][/g] Pages(MSI Version Used) = 200
&lt;FONT color=red size=6&gt;[15][/w] Words(MSI Source Type) = 0&lt;/FONT&gt;
&amp;lt;snip&amp;gt;
&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then one runs msiinfo with the /W switch to set the Word Count property like so&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new"&gt;
c:\msiinfo product.msi /W 8
&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then rerun the view to confirm the setting took like so&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new"&gt;

c:\&amp;gt;msiinfo product.msi

ClassId = {000C1084-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Installation Database
[ 3][/j] Subject = Testing
[ 4][/a] Author = Microsoft Corp.
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact:  Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 9][/v] Revision = {62B8B42B-9D2E-49C2-A791-C90F212940B8}
[12][/r] Created = 2005/10/25 23:00:48
[13][/q] LastSaved = 2005/10/25 23:00:48
[14][/g] Pages(MSI Version Used) = 200
&lt;FONT color=red size=6&gt;[15][/w] Words(MSI Source Type) = 8&lt;/FONT&gt;
&amp;lt;snip&amp;gt;
&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;Windows Vista Multilingual User Interface (MUI) Shortcut Support&lt;/H4&gt;
&lt;P&gt;As Tyler presented in the slide titled "What's new in MSI: More...", you can now add Windows Vista Multilingual User Interface (MUI) Shortcut support to your MSI. The way you do this is to add for new columns to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/shortcut_table.asp"&gt;Shortcut Table&lt;/A&gt; of your MSI. These are rows DisplayResourceDLL, DisplayResourceId, DescriptionResourceDLL, DescriptionResourceId placed as follows:&lt;/P&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Column&lt;/TH&gt;
&lt;TH&gt;Type&lt;/TH&gt;
&lt;TH&gt;Key&lt;/TH&gt;
&lt;TH&gt;Nullable&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Shortcut&lt;/TD&gt;
&lt;TD&gt;Identifier&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;
&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Directory_&lt;/TD&gt;
&lt;TD&gt;Identifier&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Name&lt;/TD&gt;
&lt;TD&gt;Filename&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Component_&lt;/TD&gt;
&lt;TD&gt;Identifier&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Target&lt;/TD&gt;
&lt;TD&gt;Shortcut&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Arguments&lt;/TD&gt;
&lt;TD&gt;Formatted&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Description&lt;/TD&gt;
&lt;TD&gt;Text&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Hotkey&lt;/TD&gt;
&lt;TD&gt;Integer&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Icon_&lt;/TD&gt;
&lt;TD&gt;Identifier&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;IconIndex&lt;/TD&gt;
&lt;TD&gt;Integer&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;ShowCmd&lt;/TD&gt;
&lt;TD&gt;Integer&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;WkDir&lt;/TD&gt;
&lt;TD&gt;Identifier&lt;/TD&gt;
&lt;TD&gt;&lt;/TD&gt;
&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;DisplayResourceDLL&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Formatted&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Y&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;DisplayResourceId&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Integer&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Y&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;DescriptionResourceDLL&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Formatted&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Y&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;DescriptionResourceId&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Integer&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT color=red size=6&gt;Y&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Both the DisplayResourceDLL and DescriptionResourceDLL values represent fully qualified paths to files on disk that the MUI system will load (per the Windows Vista protocol) to get the localized strings. Both the DisplayResourceDId and DescriptionResourceId represent the resource index of the string of interest. This integer is non-negative and will be negated before the call to the Shell API to reguster the MUI shortcuts.&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;[Author: &lt;A href="https://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=488945" width="1" height="1"&gt;</description><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/PDC2005/default.aspx">PDC2005</category></item><item><title>How do I get the Escape key to work on a Windows Installer dialog?</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/31/486583.aspx</link><pubDate>Mon, 31 Oct 2005 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:486583</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/486583.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=486583</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=4&gt;Question&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;How do I get the Escape key to work on a Windows Installer dialog?&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;Answer&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Edit the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/dialog_table.asp"&gt;Dialog table&lt;/A&gt;, go to the record that contains the dialog and enter your No/Cancel button's key (Name field in &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/control_table.asp"&gt;Control table&lt;/A&gt;) into the Control_Cancel field.&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=486583" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Advertising and ARPSYSTEMCOMPONENT</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/19/482800.aspx</link><pubDate>Thu, 20 Oct 2005 00:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:482800</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/482800.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=482800</wfw:commentRss><description>&lt;H4&gt;Scenario&lt;/H4&gt;
&lt;P&gt;On Windows XP, I am &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/advertisement.asp"&gt;advertising &lt;/A&gt;an MSI that has &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/arpsystemcomponent.asp"&gt;ARPSYSTEMCOMPONENT&lt;/A&gt; set to 1 but it appears in &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/configuring_add_remove_programs_with_windows_installer.asp"&gt;ARP&lt;/A&gt; anyway. Is this by design? Is there a workaround&lt;/P&gt;
&lt;P&gt;Indeed, once I fault in the product, the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/configuring_add_remove_programs_with_windows_installer.asp"&gt;ARP&lt;/A&gt; entry goes away. There’s not much to see in the MSI. Just set the property and run an advertisement. My guess is that the advertise script does not allow for this case, so there is probably no way that I can work around it.&lt;/P&gt;
&lt;H4&gt;Insight&lt;/H4&gt;
&lt;P&gt;Your analysis is correct. &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/advertisement.asp"&gt;Advertisement&lt;/A&gt; doesn't write to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uninstall_registry_key.asp"&gt;Uninstall key&lt;/A&gt; so the app shows up because of &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/configuring_add_remove_programs_with_windows_installer.asp"&gt;ARP'&lt;/A&gt;s enumeration through &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/msienumproducts.asp"&gt;MsiEnumProducts&lt;/A&gt; and the fact that there's no uninstall key reference with SystemComponent to ignore that particular product.&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;Jeff, Microsoft Dev&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=482800" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>What are the limits for a large MSI package?</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/19/482696.aspx</link><pubDate>Wed, 19 Oct 2005 19:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:482696</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/482696.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=482696</wfw:commentRss><description>&lt;P&gt;MSI MVP Stefan Krueger posted a excellent response to the question "What are the limits for a large MSI package?" in a &lt;A href="http://www.msifaq.com/a/1043.htm"&gt;FAQ entry at InstallSite.org&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thanks for the hard work Stefan ;^)&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=482696" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item><item><title>Our patches seem to work fine, yet none of the files on the disk are replaced.</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/10/03/476091.aspx</link><pubDate>Mon, 03 Oct 2005 09:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:476091</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/476091.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=476091</wfw:commentRss><description>&lt;H4&gt;Question&lt;/H4&gt;
&lt;P&gt;I am seeing a very strange issue with patches on msi 2.0, our patches seem to work fine, yet none of the files on the disk are replaced.&lt;/P&gt;
&lt;P&gt;I tried regenerating the patches with the 2.0 toolset , but that did not help.&lt;/P&gt;
&lt;H4&gt;Answer&lt;/H4&gt;
&lt;P&gt;For MSI20 Patches, you will need to pass property &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstall.asp"&gt;REINSTALL&lt;/A&gt;=ALL.&lt;/P&gt;
&lt;P&gt;You can omit &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstall.asp"&gt;REINSTALL&lt;/A&gt;=ALL with MSI30 and higher as it is smart enough to detect which features has changed.&lt;/P&gt;
&lt;P&gt;More sophisticated patching users add a &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_action_type_51.asp"&gt;type 51 custom action&lt;/A&gt; to set the &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstall.asp"&gt;REINSTALL&lt;/A&gt; property &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/reinstallmode.asp"&gt;REINSTALLMODE&lt;/A&gt; property&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/preselected.asp"&gt;Preselected&lt;/A&gt; property (to turn off the selection tree dialog)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;before &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/costinitialize_action.asp"&gt;CostInitialize&lt;/A&gt;. Each of these was conditioned on the &lt;a href="http://msdn.microsoft.com/library/en-us/msi/setup/patch.asp"&gt;PATCH&lt;/a&gt; property.  You could just set &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstall.asp"&gt;REINSTALL&lt;/A&gt; to ALL, but could cause resolve source issues for files you’re not even patching. These patching users keep track of the features their updating when they generate our patches then set the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/reinstall.asp"&gt;REINSTALL&lt;/A&gt; property to that comma-delimited list. That list is only the features they’re updating so that they don’t have the chance of resolve source issues for unpatched features. &lt;/P&gt;
&lt;H4&gt;Question&lt;/H4&gt;I was wondering if there was any downside to specifying ALL, I assume this will also be the case with 3.0. 
&lt;H4&gt;Answer&lt;/H4&gt;Not really, no. 
&lt;H4&gt;Question&lt;/H4&gt;One final question, is there any problem using the 3.0 toolset to generate 2.0 compatible patches (assuming use any of 3.0 patching features such as patch sequencing) 
&lt;H4&gt;Answer&lt;/H4&gt;Not really, no. Do make sure you set the schema to 200 (MSI 2.0) to support 2.0 patches, though. By default PatchWiz.dll 3.0+ will generate 3.0-style tables at least in the MSP, but the schema for existing tables hasn’t changed to the point of breaking 2.0 tables. Newer PatchWiz.dll to generate 2.0-style patches just fine. 
&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;Ken, MSI Dev In Test, You can get other Ken 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;Heath, DevDiv Dev, You can get other Heath insights about developing for Windows Installer from the &lt;a href="http://blogs.msdn.com/heaths/"&gt;Heath Stewart'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=2&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696&gt;&lt;FONT size=1&gt;[Author: &lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/rflaming"&gt;&lt;FONT size=1&gt;Robert Flaming&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;]&lt;/FONT&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=476091" 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>Best Practice Guidelines for Building Quality Installs: Part 1, the Basics</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/09/27/463651.aspx</link><pubDate>Tue, 27 Sep 2005 07:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:463651</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/463651.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=463651</wfw:commentRss><description>This is the first in a series of &lt;a href="http://blogs.msdn.com/windows_installer_team/archive/category/10860.aspx"&gt;Best Practice Guidelines for Building Quality Installs&lt;A&gt;. Let's start with the basics of &lt;/A&gt;quality &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;Windows Installer (MSI)&lt;/A&gt;&amp;nbsp;package. Prior postings the series: &lt;a href="http://blogs.msdn.com/windows_installer_team/archive/2005/11/11/463649.aspx"&gt;Introduction&lt;/A&gt;. 
&lt;H3&gt;Build Components According to Component Rules&lt;/H3&gt;
&lt;P&gt;To ensure that the installation or removal of one program does not harm any other programs on the system and that the &lt;A href="http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windows2000pro/evaluate/featfunc/wispro.asp"&gt;Windows Installer service&lt;/A&gt; correctly removes all resources connected with that program, your application installation package must adhere to the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/what_happens_if_the_component_rules_are_broken.asp"&gt;component rules&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;All Components have a proper ComponentId GUIDs&lt;/H3&gt;
&lt;P&gt;Though the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;Component table&lt;/A&gt;’s ComponentId field is a nullable, the consequences for not providing a ComponentId is that the component is not uninstallable or manageable via the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/installer_functions.asp"&gt;Windows Installer API&lt;/A&gt;s.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;Testability&lt;/I&gt;&lt;/B&gt;: scan &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp"&gt;Component table&lt;/A&gt; and for any row, confirm there is a component GUID in the ComponentID column.&lt;/P&gt;
&lt;H3&gt;All COM Servers must be a KeyPath of a Component&lt;/H3&gt;
&lt;P&gt;Do not include more than one COM server per component (per &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/organizing_applications_into_components.asp"&gt;Organizing Applications into Components&lt;/A&gt;). If a component contains a COM server, this must be the KeyPath for the component.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;Testability&lt;/I&gt;&lt;/B&gt;: scan file table and media for com servers. For any com server found, make sure it’s the KeyPath for a component. &lt;/P&gt;
&lt;H3&gt;No more than one target of Start menu or Desktop shortcut&lt;/H3&gt;
&lt;P&gt;Do not specify more than one file per component as a target for the Start menu or a Desktop shortcut (per &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/organizing_applications_into_components.asp"&gt;Organizing Applications into Components&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;Testability&lt;/I&gt;&lt;/B&gt;: scan shortcut and directory tables for Start menu or a Desktop shortcut targets. Make sure no component has more than one Start menu or a Desktop shortcut target.&lt;/P&gt;
&lt;H3&gt;Pass MSI Validation Testing&lt;/H3&gt;
&lt;P&gt;Any error from the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/internal_consistency_evaluators_ices.asp"&gt;Internal Consistency Evaluators&lt;/A&gt; validation suite must be fixed. Warnings represent design guidance to the package author which should be studied for applicability. If warnings do not apply or will not be fixed, they must be added to the Vendor Questionnaire to inform testing automation and customers.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Customer Impact&lt;/STRONG&gt;&lt;/EM&gt;: Highly desired by corporate customers.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;Testability&lt;/I&gt;&lt;/B&gt;: boot &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/orca_exe.asp"&gt;Orca&lt;/A&gt; on MSI file , click &lt;B&gt;Tools&lt;/B&gt; | &lt;B&gt;Validate&lt;/B&gt;, in &lt;B&gt;Validaiton Output&lt;/B&gt; dialog uncheck the &lt;B&gt;Show "INFO" Messages&lt;/B&gt; click &lt;B&gt;Go&lt;/B&gt;, run without errors, document any warnings&lt;/P&gt;
&lt;H3&gt;Uninstallation&lt;/H3&gt;
&lt;P&gt;Your application’s package must correctly and fully uninstall the application. A pure MSI package does this automatically. If your package includes &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_actions.asp"&gt;custom actions&lt;/A&gt;, you may need to proactively ensure that your application properly uninstalls with an &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/uninstalling_custom_actions.asp"&gt;uninstall custom action&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;B&gt;Customer Impact&lt;/B&gt;&lt;/I&gt;: Highly desired by corporate and retail customers.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;Testability&lt;/I&gt;&lt;/B&gt;: snap system before install and after uninstall and any thing remaining on the system should be listed in the vendor questionnaire.&lt;/P&gt;
&lt;DIV id=CSBloggerSig&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#969696 size=2&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT color=#969696&gt;&lt;FONT size=1&gt;[Author: &lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/rflaming"&gt;&lt;FONT size=1&gt;Robert Flaming&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;]&lt;/FONT&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=463651" width="1" height="1"&gt;</description><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/PDC2005/default.aspx">PDC2005</category></item><item><title>Why can't I patch or uninstall a component without a ComponentId?</title><link>http://blogs.msdn.com/windows_installer_team/archive/2005/09/20/471021.aspx</link><pubDate>Tue, 20 Sep 2005 09:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:471021</guid><dc:creator>Windows Installer Team</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/windows_installer_team/comments/471021.aspx</comments><wfw:commentRss>http://blogs.msdn.com/windows_installer_team/commentrss.aspx?PostID=471021</wfw:commentRss><description>&lt;H4&gt;Question&lt;/H4&gt;Why can't I patch or uninstall a component without a ComponentId? 
&lt;H4&gt;Answer&lt;/H4&gt;Check the Windows Installer documentation on &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/component_table.asp"&gt;Component Table&lt;/A&gt;: 
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT face="courier new"&gt;
&lt;B&gt;ComponentId&lt;/B&gt;
A string GUID unique to this component, version, and language. 
Note that the letters of these GUIDs must be uppercase. Utilities such as GUIDGEN can generate GUIDs containing lowercase letters. The lowercase letters must be changed to uppercase to make these valid component code GUIDs.

&lt;B&gt;If this column is null the installer does not register the component and the component cannot be removed or repaired by the installer.&lt;/B&gt; This might be intentionally done if the component is only needed during the installation, such as a custom action that cleans up temporary files or removes an old product. It may also be useful when copying data files to a user's computer that do not need to be registered.
&lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;So, I’d say this behavior is documented and is by design. 
&lt;H4&gt;What’s happening under the hood?&lt;/H4&gt;
&lt;P&gt;Remember that patching is a form of repair. So, when you have a component which doesn’t have a component ID then that component can not be serviced. The reason for that is when you do not provide a component ID then that component will not be registered. So, when Windows Installer tries to find the state of that component then that component will be &lt;I&gt;unknown&lt;/I&gt; to it. Furthermore, the request/action state for that component become no ops (unless you explicitly change the component state via a CA). As a result, the component will not be serviced or its baseline cached.&lt;/P&gt;
&lt;P&gt;Even if you use a custom action (CA) to set the component action states to local so that Windows Installer will be forced to service the component, you might end up in scenarios wherein the component might not be serviced per your expectations, because you would have made some false assumptions down the road. Bottom-line is: if you have some valid reason to create a GUID-less component, then use a CA to service/uninstall the component yourself than to trick Windows Installer do the job it isn't designed to do.&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;[Author: &lt;a href="http://blogs.msdn.com/windows_installer_team/archive/2005/09/09/463151.aspx"&gt;Hemchander Sannidhanam&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=471021" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/windows_installer_team/archive/tags/Design+Pointers/default.aspx">Design Pointers</category></item></channel></rss>