<?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>Tribal Knowledge in Software Logistics : UAC in MSI</title><link>http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx</link><description>Tags: UAC in MSI</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Steven Sinofsky on Windows 7 disclosure principles: respect and responsibility</title><link>http://blogs.msdn.com/rflaming/archive/2008/05/27/steven-sinofsky-on-windows-7-disclosure-principles-respect-and-responsibility.aspx</link><pubDate>Tue, 27 May 2008 18:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8555102</guid><dc:creator>rflaming</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/8555102.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=8555102</wfw:commentRss><description>&lt;P&gt;If you've wondered why not much has been officially said about Windows 7, a &lt;A class="" href="http://news.cnet.com/8301-13860_3-9951638-56.html" mce_href="http://news.cnet.com/8301-13860_3-9951638-56.html"&gt;blog on CNet&lt;/A&gt; posted today where Steven Sinofsky discusses his principles of deliberate disclosure.&lt;/P&gt;
&lt;P&gt;These two&amp;nbsp;excerpts had the most resonance for me&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;Respect&lt;/P&gt;
&lt;P mce_keep="true"&gt;I think that we're just focused--the No. 1 goal we're focused on is really the responsibility that we feel, and the respect that we have for all of our customers and partners, and making sure that what we share with them is really accurate and actionable, and that we are focused, like I keep saying, promise and deliver.&lt;/P&gt;
&lt;P&gt;Responsibility&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The team feels this tremendous responsibility to working with IHVs and ISVs and OEMs (original equipment manufacturers), because they're running businesses, they have their own business challenges, their own business goals, their own aspirations, and when we speak about what we might do, they will take it seriously. So, we appreciate that and we respect that, and it's a great benefit. But if we're not accurate or the information we provide causes them to do one thing, and then we change our mind, that doesn't bring the ecosystem forward. A big set of challenges that we learned...is making sure that the information we provide legitimately reflects the promises that we're making to ourselves and to the team as a product.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As a big fan of modern superhero movies, Sinofsky's comments evoked this memorable movie line &lt;A class="" href="http://en.wikiquote.org/wiki/Stan_Lee" mce_href="http://en.wikiquote.org/wiki/Stan_Lee"&gt;"With great power comes great responsibility"&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8555102" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Answers to questions in comments from earlier blog posts.</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-answers-to-questions-in-comments-from-earlier-blog-posts.aspx</link><pubDate>Mon, 02 Oct 2006 06:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780314</guid><dc:creator>rflaming</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780314.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780314</wfw:commentRss><description>&lt;P&gt;This is the twenty-seventh in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx"&gt;Is "this" intentional? If so, why?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx"&gt;How to Build Packages that work for both Standard User and Per-Machine?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx"&gt;Easier for my current custom installer to support UAC than switch to MSI?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780231.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780231.aspx"&gt;How do I get one credential dialog for a multiple package install?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780254.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780254.aspx"&gt;What are the Hurdles in Windows Vista Logo compliance related to UAC and MSI?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The last entry marks the end of the document I had original written up and was converting into these blogs. This entry is a switch to an Odds and Ends section that will report the questions that still occur. For this entry in the Odds and Ends section, the topic is: answers to questions to comments from blog posts.&lt;/P&gt;
&lt;H3&gt;Megh's question under &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;UAC in MSI Notes: Conflicting Definitions of Per-User&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;&lt;B&gt;1. If we term "C:\Documents and Settings\UserName\Local Settings\Application Data" as the new Per-User location, where does "C:\Documents and Settings\UserName\Application Data" kicks into (based on XP)? &lt;/B&gt;&lt;BR&gt;&lt;BR&gt;I'm not the shell folders guy but I'll offer you a few things. 
&lt;UL&gt;
&lt;LI&gt;First, there's a pattern you'll find in the OS that they move the root of the users directly relatively often. Can't tell you why but this isn't the first time it has moved and is unlikely to be the last.&lt;/LI&gt;
&lt;LI&gt;Second, if you are using a CSIDL and the APIs, the shell will take care of you. I suspect the first point is to try and isolate those that are not following this point but I have no corroboration for this hunch.&lt;/LI&gt;
&lt;LI&gt;Third, I've heard talk that the old directories may be hard linked to the new directories for app compat but I can't tell you how or where I heard that.&lt;/LI&gt;&lt;/UL&gt;I know the app compat teams are planning to expand their documentation but I don't know if this is on the list. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;2. When you say, "Setup programs ... can loosen ACLs on anything not Windows Resource Protected", are we talking with the installation package install arena except WRP? &lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Yes, I think we're saying the same thing. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;3. With the File and Registry Virtualization in Vista, when the UAC users are in illusion at folders like Program Files, are they redirected to CSIDL_LOCAL_APPDATA at their profile? How does this help with the per user security if all we are doing is re-directing?&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;I'm in the same building as the Virtualization team that implemented this feature (not to be confused with Virtual Machine, Virtual Server, or Softricity). This is documented to be an application compatibility measure that will be pulled from a future OS and is not even on the 64 bit platforms. Given the intended shelf life is small, the expected effect is to prevent apps (doing the wrong thing) from blowing up. The accompanying expectation is that eventually they will be either updated for Vista or replaced by a program in better compliance. &lt;/P&gt;
&lt;P&gt;Windows Installer has returned to the Windows logo program. UAC has occurred for the first time. The support of UAC in MSI has created the following questions related to Logo compliance.&lt;/P&gt;
&lt;H3&gt;RandomGuy's question under &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;UAC in MSI Notes: The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;&lt;B&gt;Hmm... that works for everything except for custom actions which run after Installfinalize... Because they are not deferred custom actions and hence the noimpersonate bit cannot be set.&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Yes, exactly right. This is because InstallFinalize is the edge of the Teal circle in the "Saw Tooth" diagram. Once you are outside of the circle, there is no elevation allowed. This is an intentional constraint on the system because it allows the system to be more secure and more deployable. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780314" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: What are the Hurdles in Windows Vista Logo compliance related to UAC and MSI?</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-what-are-the-hurdles-in-windows-vista-logo-compliance-related-to-uac-and-msi.aspx</link><pubDate>Mon, 02 Oct 2006 06:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780254</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780254.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780254</wfw:commentRss><description>&lt;P&gt;This is the twenty-sixth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx"&gt;Is "this" intentional? If so, why?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx"&gt;How to Build Packages that work for both Standard User and Per-Machine?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx"&gt;Easier for my current custom installer to support UAC than switch to MSI?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780231.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780231.aspx"&gt;How do I get one credential dialog for a multiple package install?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs. For this entry the topic is: What are the Hurdles in Windows Vista Logo compliance related to UAC and MSI?&lt;/P&gt;
&lt;H3&gt;Hurdles in Windows Vista Logo compliance related to UAC and MSI?&lt;/H3&gt;
&lt;P&gt;Windows Installer has returned to the Windows logo program. UAC has occurred for the first time. The support of UAC in MSI has created the following questions related to Logo compliance.&lt;/P&gt;
&lt;H3&gt;When I run my application at the end of the install, it runs as the administrative user. How do I stop that?&lt;/H3&gt;
&lt;P&gt;Like the correct user locations question above, there are a couple of solutions available. 
&lt;UL&gt;
&lt;LI&gt;First, start by consider not launching the application at all. The reason you would do this is that you can guarantee that 100% of the time the package would be running in the correct user context. 
&lt;LI&gt;Second, minimally make sure the custom action launching the application is immediate. Immediate custom actions do not impersonate. 
&lt;LI&gt;Third, the first two cases are vulnerable to the context before the MSI being elevated to an administrator who is different than the user. One can try to use WTSQueryUserToken to impersonate the root user but this is not guaranteed to work on 100% of the cases.&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Why are my Internal Consistency Validator (ICE) checks failing on my LUAAware package?&lt;/H3&gt;
&lt;P&gt;The Windows Installer section of the Windows Vista Platform SDK contains an updated version of the ICEs for Windows Installer 4.0. You can get them by installing the new version of Orca.MSI or MsiVal2.MSI.&lt;/P&gt;
&lt;H3&gt;Unsigned Binaries are Getting Flagged when I run Validation on my Package. Is this required?&lt;/H3&gt;
&lt;P&gt;The Windows Vista Logo program does have a requirement for signed binaries but it is not part of the install section. This validator is actually coming from another source than the Windows Installer ICE validators. Some tools vendors have gone the extra mile to help you get your software prepared for Logo and are providing those validators are part of their value add.&lt;/P&gt;
&lt;P&gt;If you are not interested in the Logo program, talk to your vendor about how to turn off the Logo portion of the validation. If you are interested in the Logo program but you can't sign these files (for example, they were provided to you by another vendor) please contact the Logo authority about their recommendations for handling this situation.&lt;/P&gt;
&lt;H3&gt;Logo References&lt;/H3&gt;
&lt;P&gt;The &lt;A href="http://innovateonwindowsvista.com/" mce_href="http://innovateonwindowsvista.com/"&gt;Innovate On Windows Vista&lt;/A&gt; site contains the information on both the &lt;A href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/WorkWith.aspx" mce_href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/WorkWith.aspx"&gt;Works With&lt;/A&gt; and &lt;A href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/CertifiedFor.aspx" mce_href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/CertifiedFor.aspx"&gt;Certified For&lt;/A&gt; Windows Logo programs. Windows Installer is specifically in the &lt;A href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/CertifiedFor.aspx" mce_href="http://microsoft.mrmpslc.com/VistaPlatformAdoption/Overview/CertifiedFor.aspx"&gt;Certified For&lt;/A&gt; program. The available documents are the &lt;A href="http://microsoft.mrmpslc.com/uploadedFiles/VistaPlatformAdoption/ResourcesAndTraining/Windows%20Vista%20Software%20Logo%20Spec%201.0.doc" mce_href="http://microsoft.mrmpslc.com/uploadedFiles/VistaPlatformAdoption/ResourcesAndTraining/Windows%20Vista%20Software%20Logo%20Spec%201.0.doc"&gt;Requirements Document&lt;/A&gt; and the &lt;A href="http://microsoft.mrmpslc.com/VistaPlatformAdoptionCMS/uploadedfiles/Certifiedfor_ProgramTestCases.doc" mce_href="http://microsoft.mrmpslc.com/VistaPlatformAdoptionCMS/uploadedfiles/Certifiedfor_ProgramTestCases.doc"&gt;Test Document&lt;/A&gt;. I tell folks that if they are confused about what a requirement means, examining the specific tests for that requirement is usually a good step to figuring it out.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: How do I get one credential dialog for a multiple package install?</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-how-do-i-get-one-credential-dialog-for-a-multiple-package-install.aspx</link><pubDate>Mon, 02 Oct 2006 05:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780231</guid><dc:creator>rflaming</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780231.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780231</wfw:commentRss><description>&lt;P&gt;This is the twenty-fifth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx"&gt;Is "this" intentional? If so, why?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx"&gt;How to Build Packages that work for both Standard User and Per-Machine?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780199.aspx"&gt;Easier for my current custom installer to support UAC than switch to MSI?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs. For this entry the topic is: how do I get one credential dialog for a multiple package install?&lt;/P&gt;
&lt;H3&gt;One Credential Dialog for a Multiple Package Install&lt;/H3&gt;
&lt;P&gt;One of the increasingly common behaviors seen in the market is building up an install from a set of two or more packages. Producers of the multiple package installs note that with our default guidance, their user will need to provide credentials multiple times. This can be a non-ideal experience particularly if one is concerned about credential fatigue.&lt;/P&gt;
&lt;P&gt;The recommend solution here is to have two bootstrappers, one inside the other. The external bootstrapper would have an application manifest with requestedExecutionLevel at asInvoker and the internal bootstrapper would have an application manifest with requestedExecutionLevel at requireAdministrator.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;SAMP&gt;
Setup.exe (with asInvoker)
 -&amp;gt; InternalSetup.exe (with requireAdministrator)
    + msiexec /jm &amp;lt;path to MSI 1&amp;gt;
    + msiexec /jm &amp;lt;path to MSI 2&amp;gt;
    + msiexec /jm &amp;lt;path to MSI 3&amp;gt;
 &amp;lt;-
 + msiexec /i &amp;lt;path to MSI 1&amp;gt;
 + msiexec /i &amp;lt;path to MSI 2&amp;gt;
 + msiexec /i &amp;lt;path to MSI 3&amp;gt;
&lt;/SAMP&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The external bootstrapper calls the internal bootstrapper which displays the elevation prompt then advertises all the applications in the package. The external bootstrapper returns to the internal bootstrapper and the internal bootstrapper then completes the installs in the users context. The reason to run the advertising first followed by the user install is to ensure the user context is correctly initialized for any user specific settings that may be in the package. If user context is not properly considered the Over The Shoulder case will result in the parent receiving the user context from an install intended for the child.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780231" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Easier for my current custom installer to support UAC than switch to MSI?</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-easier-for-my-current-custom-installer-to-support-uac-than-switch-to-msi.aspx</link><pubDate>Mon, 02 Oct 2006 05:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780199</guid><dc:creator>rflaming</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780199.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780199</wfw:commentRss><description>&lt;P&gt;This is the twenty-forth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx"&gt;Is "this" intentional? If so, why?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780096.aspx"&gt;How to Build Packages that work for both Standard User and Per-Machine?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs. For this entry the topic is: wouldn't it just be easier for my current custom installer to support UAC than switch to MSI?&lt;/P&gt;
&lt;H3&gt;Easier for my current custom installer to support UAC than switch to MSI?&lt;/H3&gt;
&lt;P&gt;Generally no. The answer we provide to customers is 'use MSI'. The answer should be ‘use MSI’ and the customer has the burden to say why MSI is unacceptable. 
&lt;P&gt;When we say ‘use MSI’ we are acting in the customers best interests. 
&lt;UL&gt;
&lt;LI&gt;First, customers building redundant services with the OS if the existing service in the OS provides all their needs is a waste of their resources.&lt;/LI&gt;
&lt;LI&gt;Second, the security risks to doing what’s listed below are substantial. Providing a elevated service creates an attack vector target for the black hats. If they can compromise this service, their technology is a vector to own the box. Is this customer really structured to mitigate and respond to this risk?&lt;/LI&gt;
&lt;LI&gt;Third, the ongoing maintenance of the experience is now borne by Microsoft so the one time cost in switching is made up for in Microsoft’s ongoing commitment to app compat.&lt;/LI&gt;&lt;/UL&gt;Customers want a more secure experiance on their PC and it's our responsability to bring it to them. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In my experience, the idea that 'we are undertaking the burden of security on behalf the ISV by providing these secure services in the box' sells. This sells as Microsoft’s commitment to Trustworthy Computing and it sells as Vista’s commitment to delivering a more secure platform. By reminding customers of the value in aligning with initiatives from the platform, they are usually happier in the end as it allows them to increase their focus on their market differentiating value propositions.&lt;/P&gt;
&lt;H3&gt;What about Installer Detection? Isn't that an alterative to MSI based elevation?&lt;/H3&gt;
&lt;P&gt;For now, Installer Detection and security manifests do provide application compatability mitigation but it is not intended to be a permanent solution for deployment. For example, few programs get user state correct in the Over the Sholder cases. Generally elevated programs write to the administrator's profile that provided the credentials rather than the Standard User that invoked the program. Windows Installer is designed to handle this case correctly.&lt;/P&gt;
&lt;P&gt;Updates and other maintenace operations will also require elevation if one is using Installer Detection and security manifests. The requirement to go get an administrator creates problems in enabling Standard Users to keep their software functional and secure.&lt;/P&gt;
&lt;H3&gt;But my needs are really special? Is there something you can recommend?&lt;/H3&gt;
&lt;P&gt;So the principle thing you are giving up are compelling packaging for corporate consumption. Windows Installer is a known quantity to IT departments so they trust MSI for their standard packaging format. When corporate IT departments get a package is not in the Windows Installer format, they repackage to MSI. You'll reduce the adoption costs of your software at scale if you use MSI.&lt;/P&gt;
&lt;P&gt;When your application deviates significantly from the heuristics of the platform and you can't make the platform heuristics fit, the UAC currently recommends either: 
&lt;UL&gt;
&lt;LI&gt;write their own service that runs as local system. One needs to focus on building a secure service. One should also have a plan for the black hats attacking the service and how you'll build and redistribute updates.&lt;/LI&gt;
&lt;LI&gt;ACL directories under All Users that only your application install, application itself, and application update that can touch the files.&lt;/LI&gt;&lt;/UL&gt;Yes, there are ISVs that are geared up to get this done right. If you are one of these ISVs, all we ask is that you take the security issues seriously as you design and implement your service. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780199" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: How to Build Packages that work for both Standard User and Per-Machine?</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-how-to-build-packages-that-work-for-both-standard-user-and-per-machine.aspx</link><pubDate>Mon, 02 Oct 2006 02:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780096</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780096.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780096</wfw:commentRss><description>&lt;P&gt;This is the twenty-third in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/780057.aspx"&gt;Is "this" intentional? If so, why?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs. For this entry the topic is: was "this" intentional? If so, why?&lt;/P&gt;
&lt;H3&gt;How to Build Packages that work for both Standard User and Per-Machine?&lt;/H3&gt;
&lt;P&gt;While rolling out the User Account Control (UAC) support for Windows Installer (MSI), we’ve been having a common conversation about how to build a single install package that works for both broad web and managed corporate deployment. The thread below homogenizes the questions into an imaginary ISV and the common scenario that drives this particular conversation.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Imaginary Independent Software Vendor (ISV):&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Tim is an ISV who provides both a remote browser only and locally installed client experience where both are coupled with Tim's server side backend. The locally installed Tim client harnesses the horsepower of the client node providing a richer Tim experience. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;ISVs Market Realities:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Accessing the Tim client market, Tim needs an Install experience that installs to either all-Standard-User or no-Standard-User writable locations. The all-Standard-User-writable install maximizes for reach while accepting a user could mess with integrity of the binaries. The no-Standard-User-writable install maximizes integrity of the binaries while accepting there will be less reach due to some (perhaps many) unable to get their administrators permission.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;ISVs Reduction of UAC Messages:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Tim has reduced the messages from the UAC evangelists to: 
&lt;UL&gt;
&lt;LI&gt;Microsoft expects the eventual response to any Over the Shoulder (OTS) UAC prompt will be ‘no’&lt;/LI&gt;
&lt;LI&gt;Microsoft expects very few users will run as Protected Admin (PA) there by making almost all prompts OTS&lt;/LI&gt;
&lt;LI&gt;Microsoft expects Protected Admin to be rare enough that it’s just a speed bump for highly savvy users&lt;/LI&gt;&lt;/UL&gt;Tim expects UAC to be wildly successful thus they must design their software to install where no OTS prompts will be successful. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;ISVs Derivation from UAC Messages:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Tim is willing to assume that a Protected Admin will always elevate and a pure Standard User (thus an OTS prompt) will never elevate. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Net Scenario:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;From a single install package, Tim wants to figure out whether the person initiating the install is Protected Admin or plain Standard User. If Protected Admin, then the install package will configure itself to run as no-Standard-User-writable; else (a plain Standard User), the install package will configure itself to run as all-Standard-User-writable. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Initial ISV Ask:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Please provide me a way to query if the Standard User is plain Standard User or Protected Admin user so that I can execute on this scenario. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Initial Response:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;A couple of things to consider 
&lt;UL&gt;
&lt;LI&gt;First, the official recommendation from the MSI team is that one should use multiple packages as this maps into the majority of the scenarios that were designed and tested for in MSI 4.0 development. We’ve found dual mode packages are difficult for ISVs to get right for all scenarios. &lt;/LI&gt;
&lt;LI&gt;Second, it's by-design that UAC does not allow a way to query whether a Standard User is plain Standard User or Protected Admin user so that I can execute on this scenario. UAC encourages ISVs to provide users the maximum context so that they can make an informed decision at the consent prompt. UAC does also encourage ‘when you don’t know, say no’. &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Second ISV Ask:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;The Windows Installer team has actively encouraged ISVs not to use bootstrappers if they don’t need to and we’ve determined separate packages have no collisions so they can be easily merged as long as we have a decision point to chose between the paths. Isn’t there some way to make this work. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Second Response:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Assuming you’re willing to take the risks of the road less traveled, there is a mitigation path that involves 
&lt;OL&gt;
&lt;LI&gt;set bit 3 in the word count property of the summary information stream and set the MSIUSEREALADMINDETECTION property (not yet published in the online SDK, internal copy below) and author the package to use AdminUser to determine if the context is already admin. If AdminUser is true, install to the no-Standard-User-writable location; else (AdminUser is false), install to the all-Standard-User-writable location.&lt;/LI&gt;
&lt;LI&gt;for non-corporate distribution, just provide the MSI and the general case will be all-Standard-User-writable install. Warning: you’ll need to figure out how to account for the potential for user tampering of the binaries.&lt;/LI&gt;
&lt;LI&gt;for corporate distribution, provide the MSI along with instructions on how to invoke the plain .MSI in common corporate deployment systems (Group Policy, SMS, Altiris, Tivoli, OpenView, etc) that may require the plain .MSI. The secret sauce to this scenario is that most corporate deployment systems invoke the package from a client running as Local System on the client node.&lt;/LI&gt;
&lt;LI&gt;for the occasional home administrator that does not have corporate distribution tools, provide a bootstrapper (commonly called a setup.exe) that is &lt;A href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.asp" mce_href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.asp"&gt;manifested to run as admin &amp;lt;requestedExecutionLevel level="Administrator" /&amp;gt;&lt;/A&gt; that will invoke the MSI.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This is not the majority case for software distribution today so we are unable to provide the same assurances we would provide were you to follow the recommended path. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Third ISV Ask:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;Is there a way to avoid the setup.exe bootstrapper in the home administrator case? &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Subsequent Response:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;You could recommend folks run the install from an elevated command prompt. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Preliminary SDK page:&lt;/B&gt;&lt;BR&gt;
&lt;P&gt;MSIUSEREALADMINDETECTION Property&lt;BR&gt;&lt;BR&gt;Set the MSIUSEREALADMINDETECTION property to 1 to request that the installer use actual user information when setting the AdminUser property. When running on Windows Vista, the Privileged and AdminUser are the same. Authors should used the Privileged property in new packages. Legacy packages that require distinct Privileged and AdminUser properties can restore the difference by setting the MSIUSEREALADMINDETECTION property. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780096" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Is "this" intentional? If so, why?</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-is-this-intentional-if-so-why.aspx</link><pubDate>Mon, 02 Oct 2006 02:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780057</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/780057.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=780057</wfw:commentRss><description>&lt;P&gt;This is the twenty-second in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/779925.aspx"&gt;Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs. For this entry the topic is: was "this" intentional? If so, why?&lt;/P&gt;
&lt;H3&gt;Is "this" intentional? If so, why?&lt;/H3&gt;
&lt;P&gt;As folks load context from Microsoft's documentation there is a point of synthesis at which they start to wonder why did they intend to do that. Some topics are harder than others to connect to the underlying intent. From what I've experianced in conversations with customers, there are always places in the picture that are difficult to see clearly. &lt;/P&gt;
&lt;P&gt;What follows is a set of questions that I get where customers wonder if "this" is intentional and if so why?&lt;/P&gt;
&lt;H3&gt;What about maintenance mode beyond patching?&lt;/H3&gt;
&lt;P&gt;(note: "this" == operations other than install and patching)&lt;/P&gt;Maintenance mode operations such as repair or feature state changes do not require credential prompts. This is principally due to the legacy of Windows Installer running on lockdown systems on operating systems prior to Vista. Windows Installer remembers that an application install was ‘blessed’ by an administrator (technical term is for a ‘blessed’ install is a managed install) when running in maintenance mode. Uninstall is different in that it’s a substantial change to the system so administrator authorization via a credential prompt will be required. This is also consistent with the legacy behavior of Windows Installer on locked down systems. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Have tools vendors updated their tools to support UAC functionality?&lt;/H3&gt;
&lt;P&gt;(note: "this" == tools used on top of Windows Installer)&lt;/P&gt;The Windows Installer team has contacted the major tools vendors about the changes coming with Windows Installer 4.0 on Windows Vista. Some tools have more work to do than others. Most will need a new release to completely account for Windows Installer 4.0 on Windows Vista. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please contact your tools vendor for more information on their support plans.&lt;/P&gt;
&lt;H3&gt;Do I have to sign my MSI and MSP files?&lt;/H3&gt;
&lt;P&gt;(note: "this" == value of signing)&lt;/P&gt;
&lt;P&gt;There are three main reasons to sign MSIs and MSPs. 
&lt;UL&gt;
&lt;LI&gt;First, the Windows Shell is going to differentiate the user experience for signed MSIs and non-signed MSIs in an effort to make the non-signed MSIs seem more concerning.&lt;/LI&gt;
&lt;LI&gt;Second, a signed MSP with the associated certificate populated in the MsiPatchCertificate table will enable users to apply patches without UAC credential prompts. Less friction in patching will enable the application users to stay more secure.&lt;/LI&gt;
&lt;LI&gt;Third, signing is part of the habits one should have to create secure setups.&lt;/LI&gt;&lt;/UL&gt;See the Windows Installer SDK topic “Guidelines for Authoring Secure Installations” for more information. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Can I have a single package that works with both the old Windows platforms and Windows Vista?&lt;/H3&gt;
&lt;P&gt;(note: "this" == compatability of packages&lt;/P&gt;
&lt;P&gt;Yes. Since Windows Installer 2.0, the Windows Installer has committed to forward and backward compatibility for the packages. This means that each of the engines will look data specific to a feature for that engine and will only provide ‘new’ functionality of the data is present. Given the engines look for specific features, the older engines do not see the data for the newer engines and thus it does not interfere. Finally, where the old behavior and the new behavior intersect, we respect the legacy behavior until unless there is data suggest the package author opted into the new behavior.&lt;/P&gt;
&lt;H3&gt;Does the credential dialog prompt mean that unattended or quiet installs are no longer supported?&lt;/H3&gt;
&lt;P&gt;(note: "this" == silent behaviors for automation)&lt;/P&gt;
&lt;P&gt;It can but it doesn't have to 
&lt;UL&gt;
&lt;LI&gt;For corporations, there is rich tools market to provide client side services that have the capacity to run as Local System and communicate with a central server to proxy admin rights. This is true for Microsoft products such as Group Policy and SMS as well as products from our partners.&lt;/LI&gt;
&lt;LI&gt;For home users, look for software that does not require administrator rights to install.&lt;/LI&gt;
&lt;LI&gt;For testing, the UAC team recommends building a testing service that runs as Local System and has the capacity to take commands and elevate them.&lt;/LI&gt;
&lt;LI&gt;For administrators, running from an elevated command prompt will also allow for the install it self to be run silently.&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Is Windows Installer 4.0 for Vista only?&lt;/H3&gt;
&lt;P&gt;(note: "this" == lack of downlevel redistributable)&lt;/P&gt;
&lt;P&gt;Windows Installer 4.0 is different than previous Windows Installer releases in that we are not planning any down-level redistributable. This is because of three reasons: 
&lt;OL&gt;
&lt;LI&gt;The big-ticket features we targeted for Windows Installer 4.0 (UAP, Restart Manager, MUI, etc...) were all Windows Vista-specific, and those features would not be supported down-level.&lt;/LI&gt;
&lt;LI&gt;We designed all the features to be backwards-compatible with previous versions of the Windows Installer (so there is no need to target Windows Installer 4.0, specifically -- you can create a package that installs perfectly fine on Windows Installer 2.x or 3.x and the new features will "light up" on Windows Vista).&lt;/LI&gt;
&lt;LI&gt;We realized that many people redistribute the latest Windows Installer engine without actually needing the new features, so we decided this will be a safe way to save people the reboot down level.&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;My application install requires a driver install. Can I do driver installs with a MSI package?&lt;/H3&gt;
&lt;P&gt;(note: "this" == unified install package with application and driver)&lt;/P&gt;
&lt;P&gt;There is a mixed answer today: no, maybe, and yes. 
&lt;UL&gt;
&lt;LI&gt;No, driver installs are not supported with the standard tables and standard actions.&lt;/LI&gt;
&lt;LI&gt;Maybe, there is a class of driver installs supported by the DiFX functionality. Please search the web for background on which class of driver installs is supported by DiFX. Most major tools vendors have DiFX support in their most recent versions of application.&lt;/LI&gt;
&lt;LI&gt;Yes, a driver install can be called from a custom actions in the Windows Installer.&lt;/LI&gt;&lt;/UL&gt;If calling the driver install from a custom action, please be sure to include the NoImpersonate bit on the deferred custom action that is making the call so that the executable runs in the Local System context. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Are the Windows Installer APIs affected by the UAC?&lt;/H3&gt;
&lt;P&gt;(note: "this" == Windows Installer APIs dependencies)&lt;/P&gt;
&lt;P&gt;Some are. Any Windows Installer API that can provide a different result if you are an admin (such as MsiEnumProducts) or takes a UserSID as a parameter (such as MsiSourceListAddSourceEx). If you have an application that uses these APIs, consider using the UAC guidelines for ISVs to determine how to best adjust and partition your application.&lt;/P&gt;
&lt;H3&gt;One of the tried and true troubleshooting techniques for Windows Installer is to re-register the service via a call to msiexec. Has this changed under Windows Vista?&lt;/H3&gt;
&lt;P&gt;(note: "this" == re-registering service)&lt;/P&gt;
&lt;P&gt;Yes, but not due to UAC. As a Windows feature, the Windows Installer registry keys have come under the jurisdiction of Windows Resource Protection. Please refer to the Windows Resource Protection guidance for how to reregister a service from Windows.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780057" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Do I need to consider "this" when I'm designing for UAC in MSI? Generally, no.</title><link>http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-do-i-need-to-consider-this-when-i-m-designing-for-uac-in-msi-generally-no.aspx</link><pubDate>Mon, 02 Oct 2006 01:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:779925</guid><dc:creator>rflaming</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/779925.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=779925</wfw:commentRss><description>&lt;P&gt;This is the&amp;nbsp;twenty-first in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries &lt;/P&gt;
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778771.aspx"&gt;How do I troubleshoot UAC in MSI via the log?&lt;/A&gt; &amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs.&amp;nbsp; For this entry&amp;nbsp;the topic is: Do I need to consider "this" when I'm designing for UAC in MSI?&lt;/P&gt;
&lt;H3&gt;Do I need to consider "this" when I'm designing for UAC in MSI?&amp;nbsp; Generally, no.&lt;/H3&gt;
&lt;P&gt;As folks load context from Microsoft's documentation there is a point of synthesis at which they start to ask how does this relate to that.&amp;nbsp; Ideally we could say that 'we've not written anything about this relating to that so one does not relate to the other'.&amp;nbsp; Unfortunately there's history where we've either documentation being wrong or incomplete OR we'd didn't put those two components together to see if they relate.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I like talking to customers about boundaries and relationships because it means they've done their homework.&amp;nbsp; Those customers that are asking because they are experiancing behavior that they are trying to understand are even better.&amp;nbsp; Customers that are already committed are the ones that have most invested and I like helping investors.&lt;/P&gt;
&lt;P&gt;What follows is a set of questions that I get about customers "this" list to which I respond generally no.&lt;/P&gt;
&lt;H3&gt;If I sign my Windows Installer packages, can I register the certificate so that no credentials are required ever (similar to the way Credential Free Patching works)?&lt;/H3&gt;
&lt;P&gt;(note: "this" == certificates as handle for authorization model)&lt;/P&gt;
&lt;P&gt;No. This feature is under consideration for future versions of Windows.&lt;/P&gt;
&lt;P&gt;Customers are also asking for this type of feature for the rest of the UAC credential prompt situations. Today there is a technology called SAFER that is designed to allow a corporate authority (IT department via active directory) to deny rights to run programs.&lt;/P&gt;
&lt;P&gt;The pre-Vista logic underlying SAFER was everything gets to run unless it's denied. The mindset of Vista inverts this polarity, nothing gets to run unless it's allowed. If Vista's inversion of polarity sticks in the market, it begs the question of whether SAFER's polarity should be inverted.&lt;/P&gt;
&lt;H3&gt;Is MSIExec manifested to requireAdministrator?&lt;/H3&gt;
&lt;P&gt;(note: "this" == manifesting of dependent system binaries)&lt;/P&gt;
&lt;P&gt;No. MSIExec.exe runs asInvoker when run as a client, as Local System when run as a service, and per custom action attributes when run as a custom action server. Generally, system binaries are under the protection of Windows Resource Protection so there would be nothing a customer could to do a the manifested system binary was "wrongly" manifested.&lt;/P&gt;
&lt;H3&gt;Do I get a prompt for each custom action that runs elevated?&lt;/H3&gt;
&lt;P&gt;(note: "this" == heuristics behind credential prompts)&lt;/P&gt;
&lt;P&gt;No. There is a single elevation dialog for an entire install. After receiving correct credentials, the msiexec service manages the elevation context per the attributes of the custom actions. If a custom action is marked NoImpersonate, which custom action is run in the elevated sandbox.&lt;/P&gt;
&lt;P&gt;We have heard sproratic cases of EXE custom actions triggering a credential prompt. If an EXE custom action is causing a credential prompt, there are two cases 1) the Installer Detection heuristic thinks the binary is a setup bootstrapper that needs to be elevated or 2) the binary was manifested to requireAdministrator. To prevent either case, explicitly manifest the binary asInvoker.&lt;/P&gt;
&lt;H3&gt;Given Windows Installer runs as Local System, can the Windows Installer now install files and registry keys that are protected by Windows Resource Protection (WRP)?&lt;/H3&gt;
&lt;P&gt;(note: "this" == capacity to update WRP)&lt;/P&gt;
&lt;P&gt;No, the files and registry keys under the jurisdiction of Windows Resource Protection (WRP) are only modifiable by the Trusted Installer. The Trusted Installer is a new service for Windows Vista which does not talk to the Windows Installer. Trusted Installer updates are controlled entirely by Windows so an update to those resources must be done through the Windows servicing system.&lt;/P&gt;
&lt;H3&gt;Does the UAC Virtualization Technology affect the install behavior from Windows Installer?&lt;/H3&gt;
&lt;P&gt;(note: "this" == UAC Virtualization Technology)&lt;/P&gt;
&lt;P&gt;No, the UAC virtualization technology works during the execution of the applications to mitigate some of the application compatibility problems Windows has seen with pre-Vista applications. Please see the User Account Control documentation for further information on how the virtualization technology affects running applications.&lt;/P&gt;
&lt;H3&gt;I’ve noticed some shortcuts on the start menu enable a context menu item for Run As Administrator. Can I do this with an advertised shortcut from the Windows Installer? &lt;/H3&gt;
&lt;P&gt;(note: "this" == UAC user experiance mitigation RunAs)&lt;/P&gt;
&lt;P&gt;No. The work in the shell to support Run As Administrator for an advertised shortcut was not performed for the Windows Vista release.&lt;/P&gt;
&lt;H3&gt;With all the focus on security for Windows Vista, has the Windows Installer made any improvements to the LockPermissions table?&lt;/H3&gt;
&lt;P&gt;(note: "this" == capacity to write ACLs during install events) 
&lt;P&gt;No. Many tools vendors provide their own library that is richer than the existing LockPermissions standard table and LockPermissions standard action. We recommending considering those solutions.&lt;/P&gt;
&lt;H3&gt;Can I alter the appearance UAC credential prompt dialog either from the native Windows Installer UI tables or from an External UI Handler?&lt;/H3&gt;
&lt;P&gt;(note: "this" == creating fully custom experiance using External UI Handler)&lt;/P&gt;
&lt;P&gt;No. The UAC credential dialogs are from a low level system service and can not be modified or superseded.&lt;/P&gt;
&lt;H3&gt;Are there regressions to the behaviors of Group Policy, SMS, or non-Microsoft deployment technologies after the Windows Installer changes for User Account Control under Windows Vista?&lt;/H3&gt;
&lt;P&gt;(note: "this" == corporate deployment technologies)&lt;/P&gt;
&lt;P&gt;No. Corporate deployment technologies use a service running as Local System on each client thus will be unaffected. 
&lt;UL&gt;
&lt;LI&gt;Group Policy software distribution dependency on Windows Installer is unchanged for Windows Vista. 
&lt;LI&gt;SMS client runs as Local System so the context it provides for Windows Installer is no different &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Can Windows Installer figure out when to add the shield automatically to my authored UI?&lt;/H3&gt;
&lt;P&gt;(note: "this" == shield ui construct)&lt;/P&gt;
&lt;P&gt;No. We do not have enough data about what follows a UI control to know for certain what the last UI control is before switching to the service where the elevation prompt will occur.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=779925" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: How do I troubleshoot UAC in MSI via the log?</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/30/uac-in-msi-notes-how-do-i-troubleshoot-uac-in-msi-via-the-log.aspx</link><pubDate>Sun, 01 Oct 2006 02:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:778771</guid><dc:creator>rflaming</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/778771.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=778771</wfw:commentRss><description>&lt;P&gt;This is the twentieth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778748.aspx"&gt;How do I get the shield on the advertised shortcut?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs.&amp;nbsp; For this topic, the question is: how do I troubleshoot UAC in MSI via the log?&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;&lt;B&gt;Troubleshooting Windows Installer Packages via Logs&lt;/B&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt; &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Generating verbose logs for a Windows Installer package are often the best troubleshooting technique to determine what went wrong for an install.&amp;nbsp; With the UAC in MSI functionality, there are a lot of lines in the logs to help you understand what happened.&amp;nbsp; Here's a list....&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot when the call to a custom action has failed due to lack of access to a machine?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Custom actions vary in their quality and proper handing of errors.&amp;nbsp; The underlying error the custom action will receive from their Windows API call is 0x80070005 (Access is Denied).&amp;nbsp; Assuming the custom action has not written errors to the log indicating Access is Denied, the best guess method is to&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in" type=disc&gt;
&lt;LI class=MsoNormal style="COLOR: black"&gt;Determine the problem occurred in a custom action by searching for&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; Return Value 3&lt;/SPAN&gt; in the verbose log and looking immediately before the error to see of a Custom Action as the source of the error.&lt;/LI&gt;
&lt;LI class=MsoNormal style="COLOR: black"&gt;Run the same install from an elevated command prompt and check to see if the same custom action was successful.&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="COLOR: black"&gt;Generally this indicates the custom action was the problem.&amp;nbsp; The body of the document contains the most frequent custom action errors under UAC and their mitigations.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot when a Custom Action attributes do not include the NoImpersonate bit?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following fragment (&lt;B&gt;in bold&lt;/B&gt;) when launching a custom action.&amp;nbsp; The number to the right (&lt;B&gt;&lt;I&gt;in bold italics&lt;/I&gt;&lt;/B&gt;) is the value from attribute table.&amp;nbsp; For this case, this number should have been &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;CustomActionSchedule(&amp;lt;snip&amp;gt;,&lt;B&gt;ActionType=&lt;I&gt;1025&lt;/I&gt;&lt;/B&gt;,&amp;lt;snip&amp;gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;What is the source of the log message “&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt functionality not available on this operating system&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;”?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;This message will occur if the operating system is not Vista.&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer was run from an elevated context?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the caller to the Windows Installer is already elevated. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt not required, user is an admin &lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer was with the AlwaysInstallElevated policy set?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the AlwaysInstallElevated policy is set.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: No credentials required as all installs will run elevated due to AlwaysInstallElevated policy setting&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer saw the LUAAware bit on a package?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the package contained the LUAAware bit.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Package is marked as LUA installation capable with no elevation required&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer opted out of prompting for credentials because the install was silent?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the package was run in silent mode and therefore could not prompt for credentials.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Installation UI level is silent, no credential elevation is possible&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer did not prompt for credentials because the install was already managed?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the package was already managed therefore did not require a credential prompt.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt is not required at this point, product is managed&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot the difference between the inability to access the UAC policy and that the UAC policy disabled the credential prompt?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when the attempt to access the UAC policy failed.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt unavailable, LUA policy detection failed with %d&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when UAC policy disallowed the credential prompt.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt disabled due to LUA policy settings&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot when the Windows Installer has received an Over The Shoulder elevation rather than an Admin Approval Mode elevation?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line for an Over The Shoulder elevation.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Detected that session token differs from user token, will use session token as effective token&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot when the call from Windows Installer to the credential dialog service failed?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when there was an error returned from the credential dialog service.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Failed to obtain credentials. Error = 0x%X&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;Does Windows Installer credential dialog when UAC has been turned off by policy?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;No.&amp;nbsp; The Windows Installer respects the UAC policy and terminates the install due to inability to get credential prompt.&amp;nbsp; If the install is run with under verbose logging, the following log entry is added.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential prompt disabled due to LUA policy settings&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether Windows Installer fakes the AdminUser property?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain this line when AdminUser is faked.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Setting AdminUser property to 1 because this is the client or the user has already permitted elevation&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;Additionally the log will &lt;B&gt;not&lt;/B&gt; have this line&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;Property(C): MSIREALADMINDETECTION = 1&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer package has enabled UAC patching?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain this line when UAC patching is not available due to a missing MsiPatchCertificate table.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;LUA patching is disabled: missing MsiPatchCertificate table&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain this line when UAC patching is not available due to the fact that the original package was installed per-user (ALLUSER is not defined)&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;LUA patching is disabled: not available for per-user installs&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;What does the LUASetting value from the log mean?&lt;/SPAN&gt;&lt;/B&gt; &lt;/P&gt;
&lt;P class=MsoNormal&gt;Example (&lt;B&gt;in bold&lt;/B&gt;): &lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;Executing op: ProductInfo(&amp;lt;snip&amp;gt; &lt;B&gt;LUASetting=0&lt;/B&gt; &amp;lt;snip&amp;gt;) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;LUASetting reports whether the Windows Installer considers the package is authorized for UAC (0 meaning not authorized and 1 meaning it was). &lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot whether the Windows Installer prompted for credentials?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following line when prompting for credentials. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Elevation required to install product, will prompt for credentials&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;How can I troubleshoot what was returned to the Windows Installer from the successful credential prompt?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The Windows Installer verbose log will contain the following two line the prompt for credentials has been successful. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Credential Request return = 0x0&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;MSI_LUA: Elevated credential consent provided. Install will run elevated&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;Why does the Installer.InstallProduct call in my web page fail in Internet Explorer 7 on Windows Vista?&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Internet Explorer 7 on Windows Vista has a new security feature called Low Rights Internet Explorer.&amp;nbsp;&amp;nbsp; Through this feature, the sandbox that the browser operates from has had its rights lowered to the lowest level possible.&amp;nbsp; As Windows Installer service has the capacity to elevate all the way to Local System, the Windows Installer refuses to accept calls from Low Rights processes (as IE7 now is).&lt;/P&gt;
&lt;P class=MsoNormal&gt;You can detect this case by searching for fragments in the verbose install log.&amp;nbsp; The first is the initial line in the log that tells you what the calling process is.&amp;nbsp; This line will contain the binary IExplore.exe and look something like the following (&lt;B&gt;in bold&lt;/B&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;=== Verbose logging started: &amp;lt;snip&amp;gt; Calling process: &amp;lt;snip&amp;gt; \&lt;B&gt;iexplore.exe&lt;/B&gt; ===&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;The second is the line in the log that tells you the connection to the server failed.&amp;nbsp; This line will contain the error code 0x80070005 (Access is Denied) returned from the call:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;Failed to connect to server. Error: 0x80070005&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=778771" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: How do I get the shield on the advertised shortcut?</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/30/uac-in-msi-notes-how-do-i-get-the-shield-on-the-advertised-shortcut.aspx</link><pubDate>Sun, 01 Oct 2006 02:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:778748</guid><dc:creator>rflaming</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/778748.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=778748</wfw:commentRss><description>&lt;P&gt;This is the&amp;nbsp;nineteenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778735.aspx"&gt;When General Custom Action Mitigation Fails&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs.&amp;nbsp; For this topic, the question is: how do I add shield to my advertised shortcut?&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 16pt"&gt;My application is advertised.&amp;nbsp; How do I get the shield on the advertised shortcut? &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;If you are a developer of an Administrator-Only Application, you will need to manifest your application itself to get the credential prompt appropriate to the users’ rights. If you install supports advertised shortcuts you will also need to manifest your icon. Here's a quick walkthrough for what you need to add a Shield to your shortcut.&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;Base Generation of an Icon EXE for your Advertise Shortcut&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Here's how one generates the icon only exe for advertised shortcut &lt;/P&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1&gt;
&lt;LI class=MsoNormal&gt;&lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_core_creating_or_editing_icons_and_cursors.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_core_creating_or_editing_icons_and_cursors.asp"&gt;Generate an icon.ico file.&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=2&gt;
&lt;LI class=MsoNormal&gt;&lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tools/tools/using_rc_the_rc_command_line_.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tools/tools/using_rc_the_rc_command_line_.asp"&gt;Generate the icon.rc file&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// base resource script.&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;#include "resource.h"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;/////////////////////////////////////////////////////////////////////////////&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Icon&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Icon with lowest ID value placed first to ensure application icon&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// remains consistent on all systems.&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;IDI_ICON1&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;&amp;nbsp; ICON&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "icon.ico"&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=3&gt;
&lt;LI class=MsoNormal&gt;Generate the resource.h file &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Used by icon.rc&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;#define IDI_ICON1&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;&amp;nbsp;&amp;nbsp; 101&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=4&gt;
&lt;LI class=MsoNormal&gt;&lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tools/tools/using_rc_the_rc_command_line_.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tools/tools/using_rc_the_rc_command_line_.asp"&gt;Build the icon.res file&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;rc icon.rc&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=5&gt;
&lt;LI class=MsoNormal&gt;&lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_linker_reference.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_linker_reference.asp"&gt;Build the icon.exe file&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;link icon.res /noentry /machine:x86 /dll /out:icon.exe&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=6&gt;
&lt;LI class=MsoNormal&gt;And now you have your initial icon.exe &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;dir /o:d&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;1,078 icon.ico&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; 421 icon.rc&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp; 71 resource.h&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;1,912 icon.RES&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;2,560 icon.exe&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=7&gt;
&lt;LI class=MsoNormal&gt;that you have been referencing with the &lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/en-us/msi/setup/shortcut_table.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/shortcut_table.asp"&gt;Shortcut table&lt;/A&gt; Icon_ column &lt;/LI&gt;&lt;/OL&gt;
&lt;TABLE class=MsoNormalTable id=table1 style="MARGIN-LEFT: 0.5in" cellPadding=0 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Shortcut&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Directory_&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Name&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Component_&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Target&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Arguments&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Description&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Hotkey&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Icon_&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;IconIndex&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;ShowCmd&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;WkDir&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;AdministratorTool&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;AdminToolsDirectory&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;Admin.exe&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;AdminTools&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;AdminTools&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;icon.exe&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal &amp;nbsp;&lt; td mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=8&gt;
&lt;LI class=MsoNormal&gt;foreign key to the &lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://msdn.microsoft.com/library/en-us/msi/setup/icon_table.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/icon_table.asp"&gt;Icon table&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;TABLE class=MsoNormalTable id=table2 style="MARGIN-LEFT: 0.5in" cellPadding=0 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Name&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;B&gt;Data&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;
&lt;P class=MsoNormal&gt;icon.exe&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"&gt;[Binary Data]&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;LI class=MsoNormal&gt;Generate an icon.exe.manifest file. 
&lt;OL&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; &amp;lt;assemblyIdentity version="1.0.0.0"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processorArchitecture="X86"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="Icon"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="win32"/&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; &amp;lt;description&amp;gt;Description of your application&amp;lt;/description&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; &amp;lt;!-- Identify the application security requirements. --&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; &amp;lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;security&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;requestedPrivileges&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;requestedExecutionLevel&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; level="requireAdministrator"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uiAccess="false"/&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/requestedPrivileges&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/security&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; &amp;lt;/trustInfo&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;lt;/assembly&amp;gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=2&gt;
&lt;LI class=MsoNormal&gt;Augment the icon.rc file &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Tweaked resource script.&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;#include "resource.h"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;&amp;nbsp;&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;/////////////////////////////////////////////////////////////////////////////&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;//&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;// Add Shield - per http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.asp&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;//&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;#define MANIFEST_RESOURCE_ID 1&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;B&gt;MANIFEST_RESOURCE_ID RT_MANIFEST "icon.exe.manifest"&lt;/B&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;/////////////////////////////////////////////////////////////////////////////&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Icon&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;//&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// Icon with lowest ID value placed first to ensure application icon&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;// remains consistent on all systems.&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;IDI_ICON1&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;&amp;nbsp; ICON&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "icon.ico"&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=3&gt;
&lt;LI class=MsoNormal&gt;Rebuild the icon.res file &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;rc icon.rc&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=4&gt;
&lt;LI class=MsoNormal&gt;Rebuild the icon.exe file &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;link icon.res /noentry /machine:x86 /dll /out:icon.exe&lt;/PRE&gt;
&lt;OL style="MARGIN-BOTTOM: 0in" type=1 start=5&gt;
&lt;LI class=MsoNormal&gt;And now you have your manifested icon.exe &lt;/LI&gt;&lt;/OL&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;c:\icon&amp;gt;dir /o:d&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;1,078 icon.ico&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp; 71 resource.h&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp; 421 icon.rc&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp; 600 icon.rc&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&amp;nbsp; 657 icon.exe.manifest&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt; 1,916 icon.RES&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.25in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;3,072 icon.exe&lt;/PRE&gt;&lt;PRE style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: Courier New; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;Why the second manifest anyway?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The way the Windows Installer enables advertised shortcuts is by pointing Windows the shortcut icon to a cached EXE and putting a Darwin Descriptor in the target path. Dividing a package this way enables the CreateShortcuts action in the AdvtExecuteSequence table to populate the Advertised shortcut. When the user clicks on the shortcut, the Darwin Descriptor is decoded by the Windows shell into parameters that are passed to the Windows Installer. &lt;/P&gt;
&lt;P&gt;Windows Installer will evaluate if the thing pointed as is present locally and install it if it's not. Due to the caching of credentials with Windows Installer 4.0 support for User Account Control, the Windows Installer will not prompt for credentials. The good news is that even with the dual manifesting one will get just one credential prompt at the launch of the target EXE. &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=778748" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: When General Custom Action Mitigation Fails</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/30/uac-in-msi-notes-when-general-custom-action-mitigation-fails.aspx</link><pubDate>Sun, 01 Oct 2006 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:778735</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/778735.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=778735</wfw:commentRss><description>&lt;P&gt;This is the eighteenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Conversations with Customers 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;Should I write my installer as a Standard User install? If yes, how?&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This entry continues a section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs.&amp;nbsp; For this topic, the question is: what do I do when the general mitigation for custom action fails?&lt;/P&gt;
&lt;H3&gt;What do I do when the general mitigation for custom action fails?&lt;/H3&gt;
&lt;P&gt;Earlier in this series, I'd written about the general mitigation for custom actions under the topics &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;, &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;, and &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;.&amp;nbsp; These don't always work and problems are difficult to run down.&amp;nbsp; Here are the cases we've found...&lt;/P&gt;
&lt;H3&gt;When I switch my immediate custom action to deferred and noImpersonate I can no longer access the source image on a network share.&amp;nbsp; How do I adjust for this?&lt;/H3&gt;
&lt;P&gt;The fact that you can’t access the network when running as Local System (meaning of noImpersonate bit) is a security feature.&amp;nbsp; There are two tracks to work within this security feature.&lt;/P&gt;
&lt;P&gt;The one track is to cut your dependency on accessing the source image by embedding the needed files in the binary table of the package or installing the files and then running the custom action from the installed copies of the files.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The other track is to access the network using an immediate custom action which can then communicate to a deferred custom action via setting the CustomActionData for that action.&amp;nbsp; If the CustomActionData pipe is not big enough, then some will create a temporary directory on the disk and use that as a working dir, however care should be taken to mitigate the security implications of this approach.&lt;/P&gt;
&lt;H3&gt;When I switch my immediate custom action to deferred and noImpersonate I can no longer write the correct user locations.&amp;nbsp; How do I adjust for this?&lt;/H3&gt;
&lt;P&gt;In the case of an Over The Shoulder elevation, the fact that you have access to the admin users’ account is as expected in the design.&amp;nbsp; There are two tracks to mitigate for this problem.&lt;/P&gt;
&lt;P&gt;One of the tracks is to eliminate the user state from your package.&amp;nbsp; Windows Installer has since inception guided package providers to write their user state during the first run of the application.&amp;nbsp; If one were following this guidance, there should be fewer (and possibly no) instances of the deferred, noImpersonate custom action writing the wrong users profile.&lt;/P&gt;
&lt;P&gt;The other track is to use WTSQueryUserToken to try and get the identity of the person that launched the program so that you can write their profile.&amp;nbsp; This technique requires code to then use the token to impersonate a user.&amp;nbsp; This technique is not guaranteed to work in 100% of the cases.&lt;/P&gt;
&lt;H3&gt;No matter how I adjust the position or elevation level of the custom action, the custom action continues to fail. How do I adjust for this?&lt;/H3&gt;
&lt;P&gt;These instances usually are calling an underlying API that is not UAC compatible. From here you need to debug into your custom action and check the different return codes from the APIs between the XP and Vista experience. How to debug your custom action depends on the type of action.&lt;/P&gt;
&lt;H3&gt;My custom action is triggering another UAC prompt. How do I adjust for this?&lt;/H3&gt;
&lt;P&gt;This can happen with an EXE custom action which Installer Detection heuristically evaluates to bootstrapper that need elevation.&amp;nbsp; One fix for this is to add a &lt;A href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.aspp" mce_href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.aspp"&gt;security manifest&lt;/A&gt; to the EXE.&amp;nbsp; The other fix for this is to move to a non-EXE custom action such as a DLL custom action.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=778735" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Should I write my installer as a Standard User install? If yes, how?</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/30/uac-in-msi-notes-should-i-write-my-installer-as-a-standard-user-install-if-yes-how.aspx</link><pubDate>Sun, 01 Oct 2006 01:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:778690</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/778690.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=778690</wfw:commentRss><description>&lt;P&gt;This is the&amp;nbsp;seventeenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778615.aspx"&gt;Read the Friendly Manual&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;This entry will start a new section specifically focused on Question and Answers that often come up in the UAC in MSI dialogs.&amp;nbsp; First up, should I write my installer as a Standard User install?&amp;nbsp; If yes, how? 
&lt;H3&gt;Should I write my installer as a Standard User Install?&lt;/H3&gt;
&lt;P&gt;It depends.&amp;nbsp; The dependencies include &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Whether the architecture of the application being installed will work from a Standard User installed location.&amp;nbsp; There are places in the system that will always require admin rights to install to.&amp;nbsp; If your application must go there, there's no use in going any further.&amp;nbsp; 
&lt;LI&gt;If you're going to have an application that needs administrator's permission to run, you don't want it in a per-user location.&amp;nbsp; An application that is going to be elevated should install to a location that is not Standard User tamper-able.&amp;nbsp; Were a program that ran elevated tamer-able by the user, a black hat could modify the binary in the per-user context and then elevate to compromise the entire machine. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;When talking to customers, package producers (generally ISVs) have told me they don't want per-user for these reasons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Installing to locations the user has the ability to alter might reduce the confidence the package producer has for the integrity of the install.&amp;nbsp; This can affect support costs as well as computational correctness under a regulatory environment (lawyers, accounts, food and drug companies, government agencies, etc) 
&lt;LI&gt;Multiple instances of an install means there is duplicate copies of binaries on the machine which wastes disk space.&amp;nbsp; A per-machine install creates a single copy of common binaries for all users thus saving space. 
&lt;LI&gt;Software is less secure because updating behavior has to be done for each user on the machine.&amp;nbsp; In other words, the occasional user on the machine can made the machine vulnerable because they are not on the machine often enough to keep the software they use up to date. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;When talking to customers, package consumers (generally corporations) have told me they &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Want programs in locations users can't tamper with.&amp;nbsp; User tampering is a major source of support costs. 
&lt;LI&gt;Centralized install, servicing, and uninstall from a central IT department are all more challenging when the apps are just in the users profile.&amp;nbsp; There are numerous conditions where it is known not to work at all. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The one case Standard User makes the most sense is viral applications that are being distributed via the web.&amp;nbsp; Even for these applications one has to ask the question: do you want to eventually grow-up to be distributed inside a corporation?&amp;nbsp; &lt;/P&gt;
&lt;H3&gt;How do I build a Standard User package?&lt;/H3&gt;This takes a bit of work to make a package install only to the locations a Standard User has permission. Some of the requirements are 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Use a &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_action_type_51.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/custom_action_type_51.asp"&gt;Type 51 Custom Action&lt;/A&gt; in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/installuisequence_table.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/installuisequence_table.asp"&gt;InstallUISequence&lt;/A&gt; to &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/specifying_a_per_user_or_per_machine_installation.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/specifying_a_per_user_or_per_machine_installation.asp"&gt;always unset the ALLUSERS&lt;/A&gt; (the per-user option) 
&lt;LI&gt;Files must be written only to folders that Standard User has access to.&amp;nbsp; Assuming the ALLUSERS is always set to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp"&gt;per-user&lt;/A&gt; setting, you can use the redirectable folder properties but not &lt;SPAN style="FONT-SIZE: 11.5pt"&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/programfilesfolder.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/programfilesfolder.asp"&gt;ProgramFilesFolder&lt;/A&gt; as it does not &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asphttp:/msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asphttp:/msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp"&gt;redirect on per-user&lt;/A&gt;.&lt;/SPAN&gt; 
&lt;LI&gt;Install app to a location under &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/localappdatafolder.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/localappdatafolder.asp"&gt;LocalAppDataFolder&lt;/A&gt;.&amp;nbsp; 
&lt;LI&gt;All registry settings should be written to HKCU which is 1 in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/registry_table.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/registry_table.asp"&gt;Registry Table&lt;/A&gt;’s Root column. 
&lt;LI&gt;Flip bit 3 of the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/word_count_summary.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/word_count_summary.asp"&gt;word count property in the summary information stream&lt;/A&gt; to signal no credential prompt is required. 
&lt;LI&gt;If you have a bootstrapper (typically named setup.exe), &lt;A href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.aspp" mce_href="http://msdn.microsoft.com/library/en-us/dnlong/html/AccProtVista.aspp"&gt;manifest the requestedExecutionLevel to run asInvoker&lt;/A&gt;. 
&lt;LI&gt;Pass &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/using_internal_consistency_evaluators.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/using_internal_consistency_evaluators.asp"&gt;ICE Validation&lt;/A&gt; as the ICEs have checks for incorrectly mixing &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asphttp:/msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asphttp:/msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp"&gt;per-user&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_machine_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_machine_installations.asp"&gt;per-machine&lt;/A&gt; state. 
&lt;LI&gt;Test both from a Standard User account and from an elevated command prompt to confirm behavior. 
&lt;LI&gt;Provide your users’ documentation of the user specific nature of the package as this is atypical in today’s application installs. &lt;/LI&gt;&lt;/OL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=778690" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Read the Friendly Manual</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/30/uac-in-msi-notes-read-the-friendly-manual.aspx</link><pubDate>Sun, 01 Oct 2006 00:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:778615</guid><dc:creator>rflaming</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/778615.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=778615</wfw:commentRss><description>&lt;P&gt;This is the sixteenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768853.aspx"&gt;O Whitepaper, Where Art Thou?&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;This entry will talk about the next step to understanding the broader architecture in play for understanding UAC in MSI: please take the time to read the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;SDK&lt;/A&gt;. 
&lt;H3&gt;Read the Fine Manual (&lt;A href="http://en.wikipedia.org/wiki/Rtfm" mce_href="http://en.wikipedia.org/wiki/Rtfm"&gt;RTFM&lt;/A&gt;), an old &lt;A href="http://en.wikipedia.org/wiki/Initialism" mce_href="http://en.wikipedia.org/wiki/Initialism"&gt;acronym&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;If you are already deeply involved in this topic, I don't have to tell you the following. For most Windows Installer experts, a large part of providing their expertise to others Windows Installer is being a human index to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;Windows Installer portion of the Platform Software Development Kit&lt;/A&gt;. While there are more rude versions of &lt;A href="http://en.wikipedia.org/wiki/Rtfm" mce_href="http://en.wikipedia.org/wiki/Rtfm"&gt;RTFM&lt;/A&gt;, Read The Fine Manual is tried and true advice from many generations of computing. You'd be surprised how just understanding the manual makes you an expert.&lt;/P&gt;
&lt;P&gt;Inevitably I run into those who, like me honestly, have only partially consumed &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;the manual&lt;/A&gt;. These Windows Installer journeyman 
&lt;UL&gt;
&lt;LI&gt;get stuck in translating the intent behind a topic 
&lt;LI&gt;synthesizing the full insight needed to understand 
&lt;LI&gt;find the topics are insufficiently rich or verbose 
&lt;LI&gt;point out to the rich mix of mixing documentation &lt;/LI&gt;&lt;/UL&gt;To these journeyman I am sympathetic. I've personally tried to help by opening hundreds of documentation bugs in the six months I was focused on documentation for &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/what_s_new_in_windows_installer_version_4_0.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/what_s_new_in_windows_installer_version_4_0.asp"&gt;Windows Installer 4.0&lt;/A&gt;. Some of those bugs came back "By Design" or "Won't Fix" so I've learned there are constraints to the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;SDK&lt;/A&gt; document format. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;SDK&lt;/A&gt; is focused on explaining "What?". "How?" and "Why?" questions are not the domain of the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;SDK&lt;/A&gt;. Some of the "How?" and "Why?" around the Windows Installer can be inferred from the "What?" BUT not all things. Other technologies in the Windows motivate shelves and shelves of technical books. Other technologies in Windows motivate whitepapers and rich tool environments on top of the base "What?" that comes from the platform &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;SDK&lt;/A&gt;. Windows Installer does have a small market but for these secondary sources but it's still small on a relative basis. &lt;/P&gt;
&lt;P&gt;Still, if you aspire to go beyond the journeyman to attain architectural mastery, you're going to need to have the "What?" on hand as you work outward toward the "How?" and "Why?". &lt;/P&gt;
&lt;H3&gt;Quick Introduction to Topics in the SDK&lt;/H3&gt;
&lt;P&gt;So the journeyman say "I'm under some pressure so could help me pick out the important items?". Absolutely. Here you go:&lt;/P&gt;
&lt;P&gt;Let's start on the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/what_s_new_in_windows_installer_version_4_0.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/what_s_new_in_windows_installer_version_4_0.asp"&gt;What's New in Windows Installer Version 4.0?&lt;/A&gt; page. 
&lt;BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/using_windows_installer_with_uac.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/using_windows_installer_with_uac.asp"&gt;Using Windows Installer with UAC&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Our professional SDK writers introduction to what UAC in MSI means.&amp;nbsp; Chock full of goodness.&amp;nbsp; Tight writing.&amp;nbsp; (Wish I could write like that. ;^) &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/user_account_control__uac__patching.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/user_account_control__uac__patching.asp"&gt;User Account Control Patching&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;An update to the 3.1 feature that enabled home users get patch even if they were Standard Users in the precursor to UAC called Least Privileged User.&amp;nbsp; A full forensic account of UAC in MSI would report this as proof MSI could help deliver the UAC scenarios. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/u_gly.asp?FRAME=true#_msi_user_account_control_gly" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/u_gly.asp?FRAME=true#_msi_user_account_control_gly"&gt;User Account Control&lt;/A&gt; glossary entry 
&lt;BLOCKQUOTE&gt;Functional definition of UAC in the MSI SDK.&amp;nbsp; Also provides a bridge to the UAC portion of the SDK. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_user_installations.asp"&gt;Per-User&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/per_machine_installations.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/per_machine_installations.asp"&gt;Per-Machine&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Stuff you need to understand to see the difference between Install per-user and per-machine.&amp;nbsp; Compare this with the way UAC defines per-user and the gaps and seams will start to appear for you too. &lt;/BLOCKQUOTE&gt;&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;Biggest explanation comes for the topic &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/using_windows_installer_with_uac.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/using_windows_installer_with_uac.asp"&gt;Using Windows Installer with UAC&lt;/A&gt; and it's sub topics. 
&lt;BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/guidelines_for_packages.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/guidelines_for_packages.asp"&gt;Guidelines for Packages&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;This topic was generated from one of the first bugs I opened against the SDK to respond to the top customer issues.&amp;nbsp; The dialog I remember around this time was: sure, these topics are all already covered in other topics in the SDK but customers are having a really hard time putting these all together.&amp;nbsp; As you read this, contrast this with what I've tried to say in the blog series and you may get a sense of the difference between going from "What?" to "How?" in the format to the SDK that is distinct from going to the "Why?" to "How?" I'm trying to built out via the blog. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/authoring_packages_without_the_uac_dialog_box.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/authoring_packages_without_the_uac_dialog_box.asp"&gt;Authoring Packages Without the UAC Dialog Box&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Again another "how" topic that was based off a bug that said: sure, these topics are all already covered in other topics in the SDK but customers are having a really hard time putting these all together. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/installing_a_package_with_elevated_privileges_for_a_non-admin.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/installing_a_package_with_elevated_privileges_for_a_non-admin.asp"&gt;Installing a Package with Elevated Privileges for a Non-Admin&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;To me, this reads like a family tree in the thinking behind how users and elevation are managed in the Windows Installer.&amp;nbsp; Were I our SDK writer, this topic would have been the hardest topic for me to write.&amp;nbsp; This is a synthesis topic that covers a number of generations of the Windows Installer and the Windows platform.&amp;nbsp; Hurts my head to think about all these generations simultaneously. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/advertising_a_per_user_application_to_be_installed_with_elevated_privileges.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/advertising_a_per_user_application_to_be_installed_with_elevated_privileges.asp"&gt;Advertising a Per-User Application to be Installed with Elevated Privileges&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;This topic hasn't changed for Vista but Vista makes this increasingly important.&amp;nbsp; As a Windows Installer user (before I got my current role), I've always considered this topic cryptic.&amp;nbsp; I still see it as cryptic but I now have a path I could walk someone through the context if I had to.&amp;nbsp; I walked a UAC PM through the context behind this once to which he said: "that would be a great whitepaper.&amp;nbsp; Can you write that down?".&amp;nbsp; It's on the list. &lt;/BLOCKQUOTE&gt;&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Outside of the Windows Installer portion of the SDK, the User Account Control team is &lt;A href="http://go.microsoft.com/fwlink/?LinkID=53781" mce_href="http://go.microsoft.com/fwlink/?LinkID=53781"&gt;still building their docs&lt;/A&gt;. Today, this contains... 
&lt;BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkID=56402" mce_href="http://go.microsoft.com/fwlink/?LinkID=56402"&gt;Getting Started with User Account Control on Windows Vista&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Pretty intro to the user experience from Vista Beta 1.&amp;nbsp; This is much friendlier writing that later writing because UAC was optional in Beta1.&amp;nbsp; Ideas are still relevant but lots of context has changed. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;SPAN class=label&gt;&lt;A href="http://www.microsoft.com/technet/WindowsVista/library/f72d606c-ad66-403b-be70-3d59e4e5c10f.mspx" mce_href="http://www.microsoft.com/technet/WindowsVista/library/f72d606c-ad66-403b-be70-3d59e4e5c10f.mspx"&gt;Getting Started with User Account Control on Windows Vista&lt;/A&gt;&lt;/SPAN&gt; 
&lt;BLOCKQUOTE&gt;Post Beta 2 draft of the above.&amp;nbsp; Subtitled: discover how to get started with User Account Control. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=66020" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkId=66020"&gt;Understanding and Configuring User Account Control in Windows Vista&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Index page that provides a jumping off point.&amp;nbsp; In that this was authored post Beta2, it's much more relevant. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&amp;amp;displaylang=en"&gt;Windows Vista Application Development Requirements for User Account Control Compatibility&lt;/A&gt; 
&lt;BLOCKQUOTE&gt;Downloadable word doc that you can place next to your development environment as a desktop reference. &lt;/BLOCKQUOTE&gt;
&lt;LI&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkID=56403" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkID=56403"&gt;Developer Best Practices and Guidelines for Applications in a Least-Privileged Environment &lt;/A&gt;
&lt;BLOCKQUOTE&gt;Bible for working with UAC between Beta 1 and Beta 2.&amp;nbsp; This is the doc I used to understand UAC. &lt;/BLOCKQUOTE&gt;&lt;/LI&gt;&lt;/BLOCKQUOTE&gt;Lots to read. Some believe understanding the manual will tell you everything you need to know. Honestly, the manual isn't enough for me but maybe simply &lt;A href="http://en.wikipedia.org/wiki/Rtfm" mce_href="http://en.wikipedia.org/wiki/Rtfm"&gt;RTFM&lt;/A&gt; it'll work for you. 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=778615" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: O Whitepaper, Where Art Thou?</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/23/uac-in-msi-notes-o-whitepaper-where-art-thou.aspx</link><pubDate>Sun, 24 Sep 2006 09:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:768853</guid><dc:creator>rflaming</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/768853.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=768853</wfw:commentRss><description>&lt;P&gt;This is the fifteenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;More Architectural Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768784.aspx"&gt;Challenges for a Beautiful Custom Action&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;This entry will talk about the a common architecture request when discussing UAC in MSI: white papers on these larger design issues would really help. 
&lt;H3&gt;Where's the Whitepaper on This?&lt;/H3&gt;
&lt;P&gt;Walking customers through deep architectural and design context in person and on the whiteboard has brought up a fair number of questions from customers. These explanations are ones that engineering managers need to take back to their developers or testing managers need to incorporate into their quality assurance plans. As a six year customer of the Windows Installer before my current stint on the Windows Installer team, I too would have been a much more successful engineer with the Windows Installer had I comprehensive architectural and design papers at my disposal.&lt;/P&gt;
&lt;H3&gt;Ideas for Whitepapers Derived from Customers&lt;/H3&gt;
&lt;P&gt;At one point during the Vista customer engagement cycle, I sat down and wrote out the list of whitepapers customers had asked me for or that I wanted since the time I was a customer. &lt;/P&gt;
&lt;H4&gt;Designing Per-User Applications for Windows Vista&lt;/H4&gt;
&lt;DT&gt;Possible Abstract&lt;/DT&gt;
&lt;DD&gt;User Account Control in Windows Vista is a paradigm shift in computing. Many applications will use this opportunity to reexamine their architecture. Some applications will need to reexamine their architecture as the black hats are starting to shift their attacks from the platform to applications. When an application architect redesigns their application, they should consider the writing their applications into per-user form as per-user is necessarily more secure than an application that requires administrator permissions to run. Below we aggregate the per-user guidance from Windows for applications. &lt;/DD&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DT&gt;Possible Table of Contents&lt;/DT&gt;
&lt;DD&gt;
&lt;UL&gt;
&lt;LI&gt;Per-User is More Secure 
&lt;UL&gt;
&lt;LI&gt;&amp;lt;standard UAC justification&amp;gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Per-User Resources 
&lt;UL&gt;
&lt;LI&gt;which folders are OK to write under UAC&lt;/LI&gt;
&lt;LI&gt;which hives are OK to write under UAC&lt;/LI&gt;
&lt;LI&gt;others?&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Per-User Applications 
&lt;UL&gt;
&lt;LI&gt;general application guidance for per user &lt;/LI&gt;
&lt;LI&gt;specific recommendations 
&lt;UL&gt;
&lt;LI&gt;services&lt;/LI&gt;
&lt;LI&gt;tray programs&lt;/LI&gt;
&lt;LI&gt;drivers&lt;/LI&gt;
&lt;LI&gt;runtimes&lt;/LI&gt;
&lt;LI&gt;activex controls&lt;/LI&gt;
&lt;LI&gt;games&lt;/LI&gt;
&lt;LI&gt;updates&lt;/LI&gt;
&lt;LI&gt;client-side of muti-tier solution&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Windows Installer Architecture&lt;/H4&gt;
&lt;DT&gt;Possible Abstract&lt;/DT&gt;
&lt;DD&gt;Windows Installer architecture is designed to operate in a corporate lockdown or Vista User Account Control. The Windows Installer server is built to run as a Windows service that runs as Local System and Impersonates the user in necessary cases. The Windows Installer client is built to run as the User and thereby only has the rights allowed for that specific user. The Windows Installer is built to support both user only and requires administrator installs. When the Windows Installer package requires administrator permission, the Windows Installer is conditioned to respect the administrator permissions whether from the token on the users account, group policy installations via Active Directory, and new for Vista User Account Control credential prompts.&lt;/DD&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DT&gt;Possible Table Of Contents&lt;/DT&gt;
&lt;UL&gt;
&lt;LI&gt;Client Server Architecture 
&lt;UL&gt;
&lt;LI&gt;Client Server Partitioning&lt;/LI&gt;
&lt;LI&gt;Building the Transaction Script&lt;/LI&gt;
&lt;LI&gt;Transaction and Rollback&lt;/LI&gt;
&lt;LI&gt;Binaries, Settings, and User State&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;User and Administrator Contexts 
&lt;UL&gt;
&lt;LI&gt;Per-User vs Per-Machine Packages&lt;/LI&gt;
&lt;LI&gt;Managed vs Non-Managed Packages&lt;/LI&gt;
&lt;LI&gt;Differentiating User, AllUsers, Administrator&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Resource Classes 
&lt;UL&gt;
&lt;LI&gt;Base Resource Types: Files, Directories, &lt;/LI&gt;
&lt;LI&gt;Standard Resource Types&lt;/LI&gt;
&lt;LI&gt;Extending MSI for Custom Resources&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Designing High Quality Custom Actions for Windows Installer&lt;/H4&gt;
&lt;DT&gt;Proposed Abstract&lt;/DT&gt;
&lt;DD&gt;The resource types that need to be addressed during to setup and the standard action infrastructure of the Windows Installer has stabilized. Purveyors of resource types need to are slowly learning reliable and consistent install and management increases their customer satisfaction with their resources. Custom actions run in a specialized environment which results in particular design requirements for the setup and management domains. Below we discuss how to design and build a high quality custom action as well as how to account for the setup and management needs in the base resource.&lt;/DD&gt;
&lt;DT&gt;&amp;nbsp;&lt;/DT&gt;
&lt;DT&gt;Proposed Table of Contents&lt;/DT&gt;
&lt;UL&gt;
&lt;LI&gt;Install and Management Paradigm 
&lt;UL&gt;
&lt;LI&gt;Transacted and Rollback&lt;/LI&gt;
&lt;LI&gt;Repair and Resiliency&lt;/LI&gt;
&lt;LI&gt;Online and Offline&lt;/LI&gt;
&lt;LI&gt;Binaries, Settings, and User State &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Blocking out Packaging 
&lt;UL&gt;
&lt;LI&gt;Data Driven Organization&lt;/LI&gt;
&lt;LI&gt;Binding to Features and Components States&lt;/LI&gt;
&lt;LI&gt;Dividing Elevated and Non-Elevated Functionality&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Effort in Custom Actions 
&lt;UL&gt;
&lt;LI&gt;Costing Custom Actions&lt;/LI&gt;
&lt;LI&gt;Marshaling Data From Database To Custom Action&lt;/LI&gt;
&lt;LI&gt;State Changing Custom Actions&lt;/LI&gt;
&lt;LI&gt;Patching and Uninstall Custom Actions&lt;/LI&gt;
&lt;LI&gt;Documentation for Authors and Administrators&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Don’t Make These Mistakes 
&lt;UL&gt;
&lt;LI&gt;Setup Time Dependency on Bits Being Installed&lt;/LI&gt;
&lt;LI&gt;Direct Call to EXE Custom Action&lt;/LI&gt;
&lt;LI&gt;Script Custom Actions&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Designing Auto-Updating applications for Windows Vista&lt;/H4&gt;
&lt;DT&gt;Proposed Abstract&lt;/DT&gt;
&lt;DD&gt;With the advent regular security bulletins, wide spread broadband connectivity, and lengthy beta/Customer Technology Preview cycles Personal Computer customers have become used to receiving updates from the web as never before. With the sophistication to expect maintenance over the web, customers are asking why not all my apps? Some applications are ahead of the curve and already provide some auto-update functionality however the advent of User Account Control in Vista has broken a number of those auto updating applications because they required administrator context. Whether you're new to Auto Updating or you've had Auto Updating for some time, this paper will discuss a standard approach for building Auto Updating into your application.&lt;/DD&gt;
&lt;DT&gt;&amp;nbsp;&lt;/DT&gt;
&lt;DT&gt;Propose Table of Contents&lt;/DT&gt;
&lt;UL&gt;
&lt;LI&gt;Release Strategies 
&lt;UL&gt;
&lt;LI&gt;Patches vs Updates&lt;/LI&gt;
&lt;LI&gt;Per-User vs Per-Machine&lt;/LI&gt;
&lt;LI&gt;Feature vs Security Changes&lt;/LI&gt;
&lt;LI&gt;Updates as Subscription Value&lt;/LI&gt;
&lt;LI&gt;Pointer to Release Planning and Management Paper&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Publishing Process 
&lt;UL&gt;
&lt;LI&gt;Web Publishing Basics: trust and privacy&lt;/LI&gt;
&lt;LI&gt;Production process functionality&lt;/LI&gt;
&lt;LI&gt;Server side functionality&lt;/LI&gt;
&lt;LI&gt;Stage side functionality&lt;/LI&gt;
&lt;LI&gt;Client side functionality&lt;/LI&gt;
&lt;LI&gt;Management process functionality&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Packaging Process 
&lt;UL&gt;
&lt;LI&gt;Use of Windows Installer 4.0 credential free patching&lt;/LI&gt;
&lt;LI&gt;Corporate Considerations for packaging&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Application of Auto Updates 
&lt;UL&gt;
&lt;LI&gt;yet another another toast popup?&lt;/LI&gt;
&lt;LI&gt;settings control?&lt;/LI&gt;
&lt;LI&gt;ask once or ask always?&lt;/LI&gt;
&lt;LI&gt;cache local or apply from remote?&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Commercial Services 
&lt;UL&gt;
&lt;LI&gt;Choosing a update service provider&lt;/LI&gt;
&lt;LI&gt;Migrating between services&lt;/LI&gt;
&lt;LI&gt;Discontinuing service&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Software Life-Cycle Management with the Windows Installer&lt;/H4&gt;
&lt;DT&gt;Proposed Abstract&lt;/DT&gt;
&lt;DD&gt;Perhaps you're just starting your software enterprise or perhaps you've been at this from some time, this is not your mother's software environment. Users are more sophisticated in their expectations and there are more technologies to account for and manage. Smart release management along with the technologies from the Windows Installer can help you deliver high quality software through out your products software-lifecycle.&lt;/DD&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DT&gt;Proposed Table of Contents&lt;/DT&gt;
&lt;UL&gt;
&lt;LI&gt;Software Lifecycle Stages 
&lt;UL&gt;
&lt;LI&gt;Dependencies&lt;/LI&gt;
&lt;LI&gt;Pre-Release to Manufacturing (or the Web)&lt;/LI&gt;
&lt;LI&gt;SKUs, Standalones, Suites&lt;/LI&gt;
&lt;LI&gt;Language Packs&lt;/LI&gt;
&lt;LI&gt;Add-ons and Redistribution&lt;/LI&gt;
&lt;LI&gt;Shipping&lt;/LI&gt;
&lt;LI&gt;Small Servicing: patching&lt;/LI&gt;
&lt;LI&gt;Medium Servicing: service packs&lt;/LI&gt;
&lt;LI&gt;Large Servicing: Upgrades&lt;/LI&gt;
&lt;LI&gt;End of Life&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Windows Installer and the Software Lifecycle 
&lt;UL&gt;
&lt;LI&gt;Builds and product testing&lt;/LI&gt;
&lt;LI&gt;March to shipping&lt;/LI&gt;
&lt;LI&gt;Localization&lt;/LI&gt;
&lt;LI&gt;Preparing for servicing&lt;/LI&gt;
&lt;LI&gt;Staging Service Releases&lt;/LI&gt;
&lt;LI&gt;Migrating to the newer version&lt;/LI&gt;
&lt;LI&gt;Stopping service&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Outside of Windows Installer Scope 
&lt;UL&gt;
&lt;LI&gt;Bootstrappers&lt;/LI&gt;
&lt;LI&gt;Package RefCounting&lt;/LI&gt;
&lt;LI&gt;Update Services&lt;/LI&gt;
&lt;LI&gt;Packaging tools&lt;/LI&gt;
&lt;LI&gt;Corporate Management&lt;/LI&gt;
&lt;LI&gt;Licensing&lt;/LI&gt;
&lt;LI&gt;Channel Differentiation&lt;/LI&gt;
&lt;LI&gt;Localization&lt;/LI&gt;
&lt;LI&gt;Add-ons and redistribution&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;The Other Titles Ideas&lt;/H3&gt;...that I didn't get time to work out abstracts and table of contents for 
&lt;UL&gt;
&lt;LI&gt;Data Center Deployment: How Microsoft Runs It’s Data Centers on Windows Installer&lt;/LI&gt;
&lt;LI&gt;Beyond the Perimeter of Windows Installer: Chainers, External UI, and Dependency Management&lt;/LI&gt;
&lt;LI&gt;The Windows Installer Cookbook: Recipes for Setup&lt;/LI&gt;
&lt;LI&gt;Shipping Localized Software with the Windows Installer&lt;/LI&gt;
&lt;LI&gt;Troubleshooting Windows Installer Packages and Install Events&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=768853" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item><item><title>UAC in MSI Notes: Challenges for a Beautiful Custom Action</title><link>http://blogs.msdn.com/rflaming/archive/2006/09/23/uac-in-msi-notes-challenges-for-a-beautiful-custom-action.aspx</link><pubDate>Sun, 24 Sep 2006 08:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:768784</guid><dc:creator>rflaming</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rflaming/comments/768784.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rflaming/commentrss.aspx?PostID=768784</wfw:commentRss><description>&lt;P&gt;This is the fourteenth in a series of notes about UAC in MSI. Per the earlier &lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/76945.aspx"&gt;caveat&lt;/A&gt;, these are just my notes and not &lt;A href="http://blogs.msdn.com/windows_installer_team" mce_href="http://blogs.msdn.com/windows_installer_team"&gt;an official position from the Windows Installer team&lt;/A&gt;. The previous entries 
&lt;OL type=A&gt;
&lt;LI&gt;Introduce... 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763945.aspx"&gt;...the UAC in MSI Notes series&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/763960.aspx"&gt;...my view of the root problem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/20/764027.aspx"&gt;...the conflicting per-user definition&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/764280.aspx"&gt;...it'll be just like Managed Installs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765118.aspx"&gt;...the jagged edge to user&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765184.aspx"&gt;...my relief providing framework&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765452.aspx"&gt;The "Saw Tooth" Diagram&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765586.aspx"&gt;Credential Prompt and Permissions&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Common Package Mistakes 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765665.aspx"&gt;The AdminUser Mistake&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/21/765707.aspx"&gt;Modify System with InstallUISequence Custom Action&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768146.aspx"&gt;Modify System with InstallExecuteSequence Custom Action Outside of Script&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768248.aspx"&gt;The NoImpersonate Bit Mistake&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;Deeper Architecture Insights 
&lt;OL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/09/23/768499.aspx"&gt;My "Four Square" Diagram&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;This entry will talk about insights that I use to explain to customers the UAC in MSI functionality: custom action challenges for a beautiful custom action. 
&lt;H3&gt;Why are Custom Actions so Difficult?&lt;/H3&gt;
&lt;P&gt;When talking about UAC in MSI, customers often remark at the complexity of writing a high quality custom action relative to other code on Windows.&amp;nbsp; These customers will point to the dot net framework or the UI investments and say over time, it's much more simple to write code in other parts of the platform.&amp;nbsp; These customers are not wrong but they are also looking at the programming darlings.&amp;nbsp; There are difficult areas in the spectrum of Microsoft technologies that are difficult to work with.&amp;nbsp; Drivers and MSN services are two I'd found particularly finicky were you a programmer used working with a programming darling such as the dot net framework.&lt;/P&gt;
&lt;P&gt;That being said, setup does present some real challenges.&amp;nbsp; First, you have to be diligent with your dependencies as lack of prerequisites can blow-up the simplest custom action.&amp;nbsp; Second, a data driven world does not directly map to a procedural programmers experience or training.&amp;nbsp; Third, more than likely the underlying stores you are trying to address during setup didn't think through the constraints the way you are going to need to.&amp;nbsp; Forth, security and robustness are an unavoidable consideration and these are programming qualities it's tough to get right.&amp;nbsp; These conditions make programming custom actions challenging.&lt;/P&gt;
&lt;P&gt;I sometimes go into a diatribe about the perceived value of solving this problem and that most businesses do not invest but usually I just sound cranky as it's not something anyone has a magic bullet to fix.&lt;/P&gt;
&lt;H3&gt;Where's the Whitepaper with Custom Action Guidelines?&lt;/H3&gt;
&lt;P&gt;Eventually customers that are trying to understand how to write high quality custom actions ask: &lt;I&gt;where's your whitepaper with Custom Action Guidelines&lt;/I&gt;?&amp;nbsp; Regretfully I say we don't have one.&amp;nbsp; Windows Installer development will tell you that what you need to know is in the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"&gt;Windows Installer SDK&lt;/A&gt;.&amp;nbsp; Read it carefully, follow it's guidelines, and you'll do fine.&lt;/P&gt;
&lt;P&gt;Customers reply: &lt;I&gt;how can it be that the SDK is complete if so many people are having problems writing custom actions?&lt;/I&gt;&amp;nbsp; If a customer has relied on one of the Windows Installer partner tools vendors, they usually have little problems.&amp;nbsp; The tools vendors have done a great job creating easy to use products that one can ramp up quickly and feel proficient in no time.&amp;nbsp; The challenge comes when they traverse from the comfortable confines of the tools vendors environment and go it alone.&amp;nbsp; Few take the time required to load all the context they need out of the SDK to step up to the challenge.&lt;/P&gt;
&lt;P&gt;Customers then wonder: &lt;I&gt;shouldn't this be a stronger concern from the Windows Installer team?&lt;/I&gt; We are a highly leveraged technology team.&amp;nbsp; We have about 10 engineers between dev, test, and PM on a technology that installs about 90% of the corporate ready software and above 40% of all PC software.&amp;nbsp; We have a lot of strong concerns and, yes, quality of custom actions is very high on the list.&amp;nbsp; By and large, we focus on features in the core of the technology and we rely on our partner tools vendors to take those core features to the masses.&amp;nbsp; There are a number of vendors that have made a nice little business out of tools on top of Windows Installer and we are very grateful to them for joining package developers and consumers through our technology.&amp;nbsp; If you believe you will need custom actions in your package, we advise you add a set of criteria you will use to choose your tools vendor.&lt;/P&gt;
&lt;H3&gt;A Beautiful Custom Action&lt;/H3&gt;
&lt;P&gt;Given we haven't produced definitive documentation, I will sometimes rattle through the aspects of high quality custom actions.&amp;nbsp; Given this is not engineering guidance, I'll borrow a phrase from art and call these my top tem qualities of a Beautiful Custom Action.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;I&gt;Data Driven&lt;/I&gt;: all the behavior in the custom action should be transparent given the a view on the data&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Component Grouped&lt;/I&gt;: all the data operated on by the custom action should be grouped in a component as components are the unit of reasoning for Windows Installer.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Feature Selected&lt;/I&gt;: all the components operated on by your custom action should be connected to features that the user can select and deselect&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Respect Existing User Choices such as Install Location&lt;/I&gt;: the selected features connected to the component grouping of the custom action data should respect the existing user choices.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Provide for User Choice: &lt;/I&gt;where appropriate enable the user to make choices relative to the custom action data.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Integrate with User Feedback: &lt;/I&gt;existing actions provide prerequisite checking during initialization, disk costing during feature selection, progress while action is executing, and logging of events from action.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Provide Developer and Administrator Guidance&lt;/I&gt;: standard actions make their behavior transparent for both developers that are providing the package and administrators that are using the package.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;Data Marshaled Based Off Selections: &lt;/I&gt;selections are analyzed, active data is derived, and actionable data is marshaled from the database into the custom action through the &lt;A href="http://msdn.microsoft.com/library/en-us/msi/setup/obtaining_context_information_for_deferred_execution_custom_actions.asp" mce_href="http://msdn.microsoft.com/library/en-us/msi/setup/obtaining_context_information_for_deferred_execution_custom_actions.asp"&gt;CustomActionData property&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;All System Changes Occur in Transaction&lt;/I&gt;: all changes that occur to the system occur in the transaction such that they can be rolled back.&lt;/LI&gt;
&lt;LI&gt;&lt;I&gt;All State Transitions Have Behavior: &lt;/I&gt;state transitions beyond install have behavior such as uninstall, repair, admin install, advertising, patching, and patch uninstall.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The &lt;I&gt;White Box Standard&lt;/I&gt; a beautiful custom action will make it easy to make connect the data to the behavior and integrated to the existing user touch points already used by standard actions.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=768784" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rflaming/archive/tags/UAC+in+MSI/default.aspx">UAC in MSI</category></item></channel></rss>