<?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>James Finnigan</title><link>http://blogs.msdn.com/jamesfi/default.aspx</link><description>Debugging, Shell Programming, Setup, Working at Microsoft, Virtualization</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Teaching Children to Program</title><link>http://blogs.msdn.com/jamesfi/archive/2009/04/04/teaching-children-to-program.aspx</link><pubDate>Sun, 05 Apr 2009 01:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9531589</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/9531589.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=9531589</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=9531589</wfw:comment><description>&lt;P&gt;I was playing &lt;A href="http://www.robozzle.com/" mce_href="http://www.robozzle.com/"&gt;Robozzle&lt;/A&gt; with my oldest and he was having a blast and loved that he was programming like Dad does.&amp;nbsp; (He did let me know he wants to be policeman though. :)&amp;nbsp; It’s a fun way to introduce kids to programming and reminds me a little of the little logo turtle.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I didn’t start out programming that way – I got into programming because my Dad was too busy to start the games I wanted to play on a computer.&amp;nbsp; Funny how one things leads to another – I ended up learning how to start the games, then I wanted more games which meant I had to program them from books (basic on the TI, don’t remember the other languages).&amp;nbsp; And eventually we learned how to make the computer do stuff (little Tron games on an apple IIe that my Grandpa had, that kind of thing).&amp;nbsp; We had a lot of fun with it, and I was way ahead when I took my first programming class – so much so that I finished very early and spent the time playing various computer games (full circle :).&amp;nbsp; So I’m a big believer in teaching kids skills through games (more fun for you, too).&lt;/P&gt;
&lt;P&gt;What games have you found that do this for programming?&amp;nbsp; What really easy programming experiences are out there?&amp;nbsp; I would love to hear what you’ve found, and recommend that you give Robozzle a try (and contribute more easy puzzles so kids have more puzzles before things get too tricky).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9531589" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Kids/default.aspx">Kids</category></item><item><title>Hyper-V review</title><link>http://blogs.msdn.com/jamesfi/archive/2008/01/31/hyper-v-review.aspx</link><pubDate>Fri, 01 Feb 2008 00:22:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7358947</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/7358947.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=7358947</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=7358947</wfw:comment><description>&lt;p&gt;The hypervisor support in Server 2008 is now out in beta and it's great to see the product hitting the street.&amp;#160; Virtualization is a huge change for the industry that can do a lot for everyone from data-centers to software houses, to people who just want to be able to run programs without worrying as much (yes, yes, escape exploits would remain a concern).&lt;/p&gt;  &lt;p&gt;Here's &lt;a href="http://www.windowsitpro.com/Windows/Articles/ArticleID/97857/pg/1/1.html"&gt;a review from Windows IT Pro&lt;/a&gt;.&amp;#160; Of course, this isn't what I actually work on - I work on the Virtual Machine Manager.&amp;#160; Sadly, our product is still behind closed doors - I can't wait to get it out to customers.&lt;/p&gt;  &lt;p&gt;To follow along until then, &lt;a href="http://blogs.technet.com/rakeshm/default.aspx"&gt;enjoy Rakesh's blog&lt;/a&gt;, which explains such decisions as &lt;a href="http://blogs.technet.com/rakeshm/archive/2008/01/11/why-we-decided-to-manage-vmware.aspx"&gt;Why we decided to manage VMWare&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Cheers,&lt;/p&gt;  &lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7358947" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/virtualization/default.aspx">virtualization</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/SCVMM/default.aspx">SCVMM</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/VMM/default.aspx">VMM</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/VMWare/default.aspx">VMWare</category></item><item><title>Beginning again - and hiring</title><link>http://blogs.msdn.com/jamesfi/archive/2007/11/07/beginning-again-and-hiring.aspx</link><pubDate>Thu, 08 Nov 2007 06:34:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5975902</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/5975902.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=5975902</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=5975902</wfw:comment><description>&lt;p&gt;Well, fun times.&amp;#xA0; I've taken a position on the &lt;a href="http://www.microsoft.com/scvmm "&gt;Virtual Machine Manager&lt;/a&gt; team.&amp;#xA0; I'll be one of the lead developers working on the next version.&amp;#xA0; It's an exciting space, with &lt;a href="http://search.live.com/results.aspx?q=vmware+competitors"&gt;a lot of players&lt;/a&gt; and a lot of new technologies.&lt;/p&gt;  &lt;p&gt;I'm also &lt;em&gt;hiring&lt;/em&gt;.&amp;#xA0; So if you're interested we have a number of interesting positions UI and non-UI related (as you might imagine :)).&amp;#xA0; &lt;/p&gt;  &lt;p&gt;Here's a link to a &lt;a href="http://members.microsoft.com/careers/search/details.aspx?JobID=15481BE7-1FE5-476D-B8EC-785CFB63DA02"&gt;UI programmer position&lt;/a&gt;, but please feel free to send me a message if you're interested.&amp;#xA0; And again, I'm hiring for non-UI positions as well - the link is just to show a little more information about the team and the direction that we're headed.&amp;#xA0;&amp;#xA0; (We are a C# shop.)&lt;/p&gt;  &lt;p&gt;If you're interested in hearing more, you can follow along on the &lt;a href="http://blogs.technet.com/virtualization/default.aspx"&gt;team blog&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5975902" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Moving/default.aspx">Moving</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Jobs/default.aspx">Jobs</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/SCVMM/default.aspx">SCVMM</category></item><item><title>The Shell Extensions Approved list is *not* a complete list of shell extensions on the system</title><link>http://blogs.msdn.com/jamesfi/archive/2007/09/07/the-shell-extensions-approved-list-is-not-a-complete-list-of-shell-extensions-on-the-system.aspx</link><pubDate>Sat, 08 Sep 2007 07:42:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4822611</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/4822611.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=4822611</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=4822611</wfw:comment><description>&lt;p&gt;I've noticed that a number of different programs just look at the Approved list of shell extensions [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved] and figure that all shell extensions will be in that list.&amp;nbsp; It's not true, because lots of folks don't really care about &lt;a href="http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/gp/237.mspx?mfr=true" target="_blank"&gt;that policy&lt;/a&gt;.&amp;nbsp; I don't know how often it's used - it doesn't really make your system more secure as far as I can tell.&amp;nbsp; (It may reduce the TCO related to folks installing poorly written shell extensions.)&lt;/p&gt; &lt;p&gt;It also doesn't apply to all shell extensions.&amp;nbsp; There are many of them (probably some of them with HKCU extensibility) that haven't been moved to the policy system yet.&amp;nbsp; (So you should always register your shell extensions there, even if it doesn't seem to be necessary.)&lt;/p&gt; &lt;p&gt;(That said, it certainly does give you quite a few of them for very little work. On my system, it finds about 325/400 - about 80%.&amp;nbsp; Because of that,&amp;nbsp;if you're thinking about turning on this policy consider the fact that you'll be disabling 1 in 5 shell extensions; will&amp;nbsp;that generate more or less support calls?)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4822611" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/shell/default.aspx">shell</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Setup/default.aspx">Setup</category></item><item><title>Supplemental Registrations (aka. Context Menu Handers (etc) - where are they loaded from...)</title><link>http://blogs.msdn.com/jamesfi/archive/2007/09/06/supplemental-registrations-aka-context-menu-handers-etc-where-are-they-loaded-from.aspx</link><pubDate>Thu, 06 Sep 2007 19:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4779995</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/4779995.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=4779995</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=4779995</wfw:comment><description>&lt;P&gt;I've been thinking about the registration problem where you want to add a context menu (much of this applies to static verbs as well) to a file type (we'll say .ogg).&amp;nbsp; You don't want the default verb, you just want to add some verbs.&amp;nbsp; Because you don't want the default, you shouldn't put your progid in the HKCR\.ogg default value, so you put an entry under HKCR\.ogg\shellex\ContextMenuHandler.&amp;nbsp; And this works great.. until someone comes along and puts a progid in HKCR\.ogg's default value.&amp;nbsp; Look at the fallthrough logic below - #2 (where we registered), and #3 are only used if there is no progid!&amp;nbsp; 
&lt;P&gt;Fallthrough logic when loading context menu handlers (static verbs and then context menu handlers are collected from the following places): 
&lt;P&gt;&lt;STRONG&gt;(DO NOT USE THIS LOGIC&amp;nbsp;IN YOUR CODE&amp;nbsp;- it is a simplification of the real logic &lt;EM&gt;and &lt;/EM&gt;it will change.&amp;nbsp; Instead, use &lt;/STRONG&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms633715.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms633715.aspx"&gt;&lt;STRONG&gt;IQueryAssociations&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; or AssocQuery* for all these kinds of file association related things.)&lt;/STRONG&gt; 
&lt;OL&gt;
&lt;LI&gt;HKCR\&amp;lt;ProgID&amp;gt; 
&lt;LI&gt;HKCR\&amp;lt;.ext&amp;gt; (only if #1 does not exist) 
&lt;LI&gt;HKCR\Unknown (only if #1 does not exist) 
&lt;LI&gt;HKCR\SystemFileAssociations\&amp;lt;.ext&amp;gt; 
&lt;LI&gt;HKCR\SystemFileAssociations\&amp;lt;PerceivedType&amp;gt; 
&lt;LI&gt;HKCR\Folder (only used if the selected item has the SFGAO_FOLDER attribute, such as a folder, zip, cab, etc.) 
&lt;LI&gt;HKCR\* 
&lt;LI&gt;HKCR\AllFilesystemObjects&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;But there is a way!&amp;nbsp; You can register &lt;A href="http://msdn2.microsoft.com/en-us/library/aa969385.aspx#supplemental" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa969385.aspx#supplemental"&gt;supplemental verbs&lt;/A&gt; associated with the &lt;A href="http://msdn2.microsoft.com/en-us/library/aa969373.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa969373.aspx"&gt;SystemFileAssociations&lt;/A&gt; key.&amp;nbsp; Note that those keys (#4 and #5) are folded in regardless of the association having a progid registered.&amp;nbsp; In our example, that would be HKCR\SystemFileAssociations\.ogg\shellex\ContextMenuHandler&lt;/P&gt;
&lt;P&gt;The important thing here is that you should never put the registration under HKCR\&amp;lt;.ext&amp;gt;(!) because you should either be putting it under your progid (#1), or in SystemFileAssociations (#4).&amp;nbsp; Why do we disable #2 and #3 in those cases?&amp;nbsp; If folks are interested, I'll talk more about that later - or feel free to guess. :)&lt;/P&gt;
&lt;P&gt;(A quick comment about #5 - I think it is often misused.&amp;nbsp; Applications don't know how to handle very many perceived types (one exception is text).&amp;nbsp; How are you going to handle the "video" perceived type?&amp;nbsp; I guarantee that we'll come out with more codecs/container formats, etc.&amp;nbsp; Unless you can guarantee that you can handle everything that will map into the perceived type, don't register for it - instead register for the individual associations that you really &lt;EM&gt;can&lt;/EM&gt; handle.)&lt;/P&gt;
&lt;P&gt;This technique is used for a lot of other things besides context menu handlers.&amp;nbsp; It's also used for &lt;A href="http://msdn2.microsoft.com/en-us/library/bb266532.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/bb266532.aspx"&gt;Property Handlers for Windows Search&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/en-us/library//aa905327.aspx#installinganduninstalling" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library//aa905327.aspx#installinganduninstalling"&gt;Windows Imaging Component codecs&lt;/A&gt;, etc, etc, etc.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;BR&gt;James&lt;/P&gt;
&lt;P&gt;[Update: finished the sentence beginning "In our example, that would be..."]&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4779995" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/shell/default.aspx">shell</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Setup/default.aspx">Setup</category></item><item><title>Installing shell extensions - please complain here</title><link>http://blogs.msdn.com/jamesfi/archive/2007/08/10/installing-shell-extensions-please-complain-here.aspx</link><pubDate>Sat, 11 Aug 2007 04:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4328374</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/4328374.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=4328374</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=4328374</wfw:comment><description>&lt;P&gt;So... I've been looking more closely at Wix and I think I'm going to build some custom actions to do a really good job installing shell extensions.&amp;nbsp; Which ones do you find most problematic?&amp;nbsp; I realize this is a bit of a change of pace for the blog, so I'll probably hit a few other forums, but please feel free to add comments/complaints about which extensions are problematic.&lt;/P&gt;
&lt;P&gt;Maybe you've already done the work to install these properly, but in some cases that can be quite complicated and I could see a lot of folks just accepting some minor bugs and moving on.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;I'll start: &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Protocol Handlers (&lt;A href="http://msdn2.microsoft.com/en-us/library/bb266527.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb266527.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb266527.aspx&lt;/A&gt;)&amp;nbsp;and Schema Extensions (&lt;A href="http://msdn2.microsoft.com/en-us/library/ms647576.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms647576.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms647576.aspx&lt;/A&gt;).&amp;nbsp; Both of these &lt;EM&gt;require&lt;/EM&gt; custom actions to be installed correctly - and there's no standard for it so everyone is probably doing it themselves which is going to lead to some really inconsistent behavior.&amp;nbsp; None of that is going to help system stability at all.&lt;/P&gt;
&lt;P&gt;Another one I came across recently was installing a shell folder that should appear on the desktop.&amp;nbsp; I added it to the desktop namespace but until the user refreshes the desktop it isn't going to appear.&amp;nbsp; You need to send a SHChangeNotify to get it to show up without user intervention.&amp;nbsp; Anyway, there's no standard action for that.&amp;nbsp; So unless you can accept a shortcut to the shell folder (which sends a notification), you'll want a CA there as well.&amp;nbsp; And there again, you want to send as minimal a notification as possible to avoid having the system reload everything when all that you needed is a new icon to show up.&lt;/P&gt;
&lt;P&gt;File Associations:&lt;BR&gt;This one is going to be a bit of a laundry list of issues, but I'll start off the first couple issues.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;If previous handlers didn't register under openwith then your registration may blow away any record that they wanted to handle that file association.&lt;/LI&gt;
&lt;LI&gt;If you register under a meta-type like TXTFile and then someone else claims .txt then you don't get invoked at all.&lt;/LI&gt;
&lt;LI&gt;Man that thing is complicated.&amp;nbsp; Way, way complicated. (I'm still learning the subtleties - feel free to correct me if I miss a beat.)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;So there's a start - let me know&amp;nbsp;as you come across other issues.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;BR&gt;James&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4328374" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/shell/default.aspx">shell</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Setup/default.aspx">Setup</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Wix/default.aspx">Wix</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/install/default.aspx">install</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/MSI/default.aspx">MSI</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/explorer/default.aspx">explorer</category></item><item><title>Summer Fun, Full House</title><link>http://blogs.msdn.com/jamesfi/archive/2007/07/25/summer-fun-full-house.aspx</link><pubDate>Thu, 26 Jul 2007 09:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4057881</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/4057881.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=4057881</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=4057881</wfw:comment><description>&lt;P&gt;(Normally this kind of post is reserved for &lt;A class="" href="http://jamesfinnigan.spaces.live.com/" mce_href="http://jamesfinnigan.spaces.live.com/"&gt;my other blog&lt;/A&gt;&amp;nbsp;where I mostly blog about non-tech - so don't worry, I won't be boring you with stories of how incrediby smart and cute my little boys are (obviously my wife's DNA is doing overtime).)&lt;/P&gt;
&lt;P&gt;We've been enjoying our summer, with lots of friends around and good weather.&amp;nbsp; We've got my sister-in-law staying with us while she gets her dental certification.&amp;nbsp;&amp;nbsp;Our youngest probably doesn't even remember life before she came to live with us.&amp;nbsp; And for a few weeks we had a friend of mine from college crashing at our place for a bit while they worked out their housing situation.&amp;nbsp; (Because John's doing his residency and needs to be very close to a number of hospitals, he needed to be in a very narrow corridor and had trouble finding folks who wanted to rent to someone out-of-state when there were plently of applicants in-state.)&amp;nbsp; And the weather has been hot, but nice.&lt;/P&gt;
&lt;P&gt;John is an eye surgeon and sees some pretty crazy stuff.&amp;nbsp; Every once in a while I'll pick up his texts and look at something I hope never happens to me and be glad that someone is helping those folks.&amp;nbsp; For example, the 4th of July had some obligatory fireworks mishaps.&amp;nbsp; His days are pretty different from mine - I'm a little jealous of how closely he gets to work with the people he's helping.&amp;nbsp; (I couldn't resist asking him if &lt;A class="" href="http://www.nbc.com/Scrubs/" mce_href="http://www.nbc.com/Scrubs/"&gt;Scrubs&lt;/A&gt;&amp;nbsp;had any parts that resembled&amp;nbsp;reality - Apparently not. :)&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Anyway his kids are about the same age and they spent all their time together.&amp;nbsp; Now that John and crew are settled in their new house, we're looking forward to hitting some cool places around here with them.&amp;nbsp; It's a little limiting with small children (I have to wait before they're ready to go rock climbing with me :)), but I'm in no hurry for them to grow up.&amp;nbsp; If you have any recommendations for good 2-5 year old destinations, I'd love to hear them.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;BR&gt;James&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4057881" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/personal/default.aspx">personal</category></item><item><title>The best way to make UAC shut up for a while</title><link>http://blogs.msdn.com/jamesfi/archive/2007/06/08/the-best-way-to-make-uac-shut-up-for-a-while.aspx</link><pubDate>Sat, 09 Jun 2007 06:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3174222</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/3174222.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=3174222</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=3174222</wfw:comment><description>&lt;P&gt;Let's say you want to install a few things and want UAC to stop bugging you while you install them.&amp;nbsp; Should you turn off UAC and install the apps?&amp;nbsp; Since that disables UAC's virtualization, it can destabilize things that depend on data written to those virtual locations.&amp;nbsp; Here's an alternative that keeps all the virtualization intact while getting UAC to lay off for a while.&lt;/P&gt;
&lt;P&gt;Fire up gpedit.msc and adjust this policy (pictured below):&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=575 alt=image src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_thumb.png" width=1103 border=0 mce_src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Change it to be &lt;EM&gt;Elevate without prompting&lt;/EM&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_1.png" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_1.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=511 alt=image src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_thumb_1.png" width=431 border=0 mce_src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/ThebestwaytomakeUACshutupforawhile_11F33/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Of course, remember to turn it back when you're done! :)&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;James&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[Update: how to do this without using gpedit.msc]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Run this command&amp;nbsp;(from an elevated&amp;nbsp;command prompt) to make UAC elevate without prompting:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;reg ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When you're done, run this command (from an elevated command prompt) to set it back to the default:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;reg ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d&amp;nbsp;2 /f&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3174222" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/virtualization/default.aspx">virtualization</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/LUA/default.aspx">LUA</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Setup/default.aspx">Setup</category></item><item><title>How to stop WinDbg from going crazy and loading all the symbols</title><link>http://blogs.msdn.com/jamesfi/archive/2007/06/04/how-to-stop-windbg-from-going-crazy-and-loading-all-the-symbols.aspx</link><pubDate>Mon, 04 Jun 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3036010</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/3036010.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=3036010</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=3036010</wfw:comment><description>&lt;P&gt;One of my favorite features of WinDbg is that it doesn't load all the symbols up-front.&amp;nbsp; That's a huge part of what makes it so much faster than Visual Studio.&amp;nbsp; However, every once in a while you can do things that cause WinDbg to go crazy and load all the symbols in a desperate attempt to resolve a symbol that it just isn't finding.&amp;nbsp; Oftentimes this is because of a typo, or because you forgot to scope the symbol to a module.&amp;nbsp; It's annoying - but it's not something that you have to live with.&lt;/P&gt;
&lt;P&gt;To tell WinDbg not to do it's whole-hog symbol search use this command:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;.symopt+ 100&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you find yourself in a situation where you don't want to wait for the debugger to finish resolving symbols before issuing the command, you can just start windbg with the -snul parameter.&amp;nbsp; In some cases, the reason this is happening is some goofy breakpoint you set, or something in your watch window - it's not going away.&amp;nbsp; If you don't want to take the time to track it down, you can bail on the workspace by starting windbg with the -WX parameter, and saving whatever you put into the first one.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Here's what the documentation has to say on the topic:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;SYMOPT_NO_UNQUALIFIED_LOADS&lt;/STRONG&gt;&lt;BR&gt;This symbol option disables the symbol handler's automatic loading of modules. When this option is set and the debugger attempts to match a symbol, it will only search modules&amp;nbsp;&lt;EM&gt;[whose symbols]&lt;/EM&gt; have already been loaded.&lt;BR&gt;This option can be used as a defense against mistyping a symbol name. Normally, a mistyped symbol will cause the debugger to pause while it searches all unloaded symbol files. When this option is active, a mistyped symbol will not be found in the loaded modules, and then the search will terminate.&lt;BR&gt;This option is off by default. It can be activated by using the&lt;STRONG&gt; -snul&lt;/STRONG&gt; command-line option. Once the debugger is running, it can be turned on or off by using &lt;STRONG&gt;.symopt+0x100&lt;/STRONG&gt; or &lt;STRONG&gt;.symopt-0x100&lt;/STRONG&gt;, respectively&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;HR&gt;
All postings are provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;&lt;FONT color=#006666&gt;http://www.microsoft.com/info/cpyright.htm&lt;/FONT&gt;&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3036010" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/windbg/default.aspx">windbg</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/debugging/default.aspx">debugging</category></item><item><title>Breaking when the instruction pointer leaves the module</title><link>http://blogs.msdn.com/jamesfi/archive/2007/05/31/breaking-when-the-instruction-pointer-leaves-the-module.aspx</link><pubDate>Thu, 31 May 2007 19:00:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3001774</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/3001774.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=3001774</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=3001774</wfw:comment><description>&lt;p&gt;The problem is to skip out of a kernel driver that we don't have symbols for - what's the best way to break on calls out of that driver.&lt;/p&gt; &lt;p&gt;If you used pc (step until the next call instruction), you would hit calls that are inside that driver.&lt;/p&gt; &lt;p&gt;Here's another approach (using an example from Pavel Lebedynskiy) - step until the ip address moves outside that module:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;.while (@eip &amp;gt; fee50000 &amp;amp; @eip &amp;lt; feef1000) { t; reip }&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If you want to skip the output, you can use setting the instruction pointer instead like we did in the &lt;a href="http://blogs.msdn.com/jamesfi/archive/2007/05/30/finding-where-a-bad-hresult-is-returned.aspx"&gt;last post using a .while trick&lt;/a&gt;.  &lt;hr&gt;  &lt;p&gt;All postings are provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;a href="http://www.microsoft.com/info/cpyright.htm"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3001774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/windbg/default.aspx">windbg</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/debugging/default.aspx">debugging</category></item><item><title>Finding where a bad HRESULT is returned</title><link>http://blogs.msdn.com/jamesfi/archive/2007/05/30/finding-where-a-bad-hresult-is-returned.aspx</link><pubDate>Thu, 31 May 2007 08:38:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3001220</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/3001220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=3001220</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=3001220</wfw:comment><description>&lt;p&gt;I've looked at this a &lt;a href="http://jamesfinnigan.spaces.live.com/blog/cns!9062539B2F0077D6!140.entry"&gt;couple&lt;/a&gt; &lt;a href="http://jamesfinnigan.spaces.live.com/blog/cns!9062539B2F0077D6!209.entry?_c=BlogPart"&gt;times&lt;/a&gt;, but here's another way to break when the error code you're looking at is being returned.&lt;/p&gt; &lt;p&gt;.while(@eax != 0xc0000005) { t ; reax } &lt;p&gt;If you want to avoid the output noise, you can do something like this: &lt;p&gt;.while(@eax != 0xc0000005) { t ; r @eip = @eip}; r eax &lt;hr&gt;  &lt;p&gt;All postings are provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at &lt;a href="http://www.microsoft.com/info/cpyright.htm"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3001220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/windbg/default.aspx">windbg</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/debugging/default.aspx">debugging</category></item><item><title>How to only break on a jump when it will be taken</title><link>http://blogs.msdn.com/jamesfi/archive/2007/05/30/how-to-only-break-on-a-jump-when-it-will-be-taken.aspx</link><pubDate>Thu, 31 May 2007 08:22:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3000830</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/3000830.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=3000830</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=3000830</wfw:comment><description>&lt;p&gt;Here's a question that came up a work a little bit back - thought I would share the result around.&lt;/p&gt; &lt;p&gt;There is a coding pattern (that I don't ever really use so I may be messing it up) that works like this:&lt;/p&gt;&lt;code&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;T1 res1;
T2 res2;
T3 res3;

res1 = GetRes1();
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (!res1) &lt;span style="color: rgb(0,0,255)"&gt;goto&lt;/span&gt; Cleanup;

res2 = res1.GetRes2();
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (!res2) &lt;span style="color: rgb(0,0,255)"&gt;goto&lt;/span&gt; Cleanup;

res3 = res2.GetRes3();

Cleanup:
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (res3) CleanupRes3(res3);
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (res2) CleanupRes3(res2);
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (res1) CleanupRes3(res1);
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;So what if you wanted to break when you are at &lt;strong&gt;&lt;em&gt;Cleanup &lt;/em&gt;&lt;/strong&gt;because res2 was null?&amp;nbsp; You can set a breakpoint with a conditional that will only break when the jump to Cleanup from res2&amp;nbsp;is going to be taken.&amp;nbsp; You could base it on the symbols and do the comparison yourself. However, in optimized code the debuggers understanding of local variable information&amp;nbsp;is often incorrect (the compiler doesn't emit enough information in the pdb to make this possible).&amp;nbsp; In that case, it may be most convenient to make a conditional breakpoint using the x86 flags (described in detail in the help file that comes with windbg under the topic &lt;strong&gt;&lt;em&gt;x86 Architecture&lt;/em&gt;&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Here's an example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;ntdll!RtlUnlockModuleSection+0x23a:&lt;br&gt;77937c71 8b4590&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [ebp-70h]&lt;br&gt;77937c74 6683785c01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word ptr [eax+5Ch],1&lt;br&gt;77937c79 7416&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; je&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ntdll!RtlUnlockModuleSection+0x25a (77937c91)&lt;/font&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;0:000&amp;gt; bu ntdll!RtlEncodePointer+0x21a ".if (@ZF=1) { gc } "&lt;br&gt;0:000&amp;gt; g&lt;br&gt;ChildEBP RetAddr&lt;br&gt;WARNING: Stack unwind information not available. Following frames may be wrong.&lt;br&gt;0011f678 77945ad7 ntdll!RtlEncodePointer+0x21a&lt;br&gt;0011f6e4 7794a980 ntdll!RtlGetNtVersionNumbers+0x83&lt;br&gt;0011f6f4 00000000 ntdll!LdrInitializeThunk+0x10&lt;br&gt;eax=00000002 ebx=7ffde000 ecx=779a00dd edx=77970f34 esi=00000000 edi=779d5d14&lt;br&gt;eip=77944bef esp=0011f534 ebp=0011f678 iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei pl nz na po nc&lt;br&gt;cs=001b&amp;nbsp; ss=0023&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=003b&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00000202&lt;br&gt;ntdll!RtlEncodePointer+0x21a:&lt;br&gt;77944bef 740d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; je&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ntdll!RtlEncodePointer+0x229 (77944bfe) [br=0]&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;ZF=1 is the flag for a comparison (which is a subtraction that sets flags) that was equal (so a subtraction would naturally result in 0 - setting the zero flag).&amp;nbsp; In this second example we're interested in breaking when it is not equal, so we used gc (to continue execution) when ZF=1.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3000830" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/windbg/default.aspx">windbg</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/debugging/default.aspx">debugging</category></item><item><title>Making an MSI that doesn't need a UAC/LUA prompt</title><link>http://blogs.msdn.com/jamesfi/archive/2007/05/02/making-an-msi-that-doesn-t-need-a-uac-lua-prompt.aspx</link><pubDate>Thu, 03 May 2007 08:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2387093</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/2387093.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=2387093</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=2387093</wfw:comment><description>&lt;H2&gt;The goal&lt;/H2&gt;
&lt;P&gt;I think that most things don't need to require a UAC prompt to install - just install it for that user.&amp;nbsp; Why not make the MSI so it doesn't prompt and your users get a smoother experience?&amp;nbsp; (Also, I feel much better installing a program that doesn't require elevation to install - at a minimum I know it's not disabling my anti-malware software.)&amp;nbsp; Ideally, with that same package you could optionally install per-machine (which requires elevation).&amp;nbsp; Here's some information on how to make it happen...&lt;/P&gt;
&lt;H2&gt;Background&lt;/H2&gt;
&lt;P&gt;I was recently asked to make an MSI for an &lt;EM&gt;extremely&lt;/EM&gt; minimal replacement of the &lt;EM&gt;Run As&lt;/EM&gt; menu item that was removed in Vista (by calling runas.exe).&amp;nbsp; Although I doubt we would ever ship something like that I decided to make an installation that didn't elevate, or that could elevate and install per-machine.&amp;nbsp; It was an interesting experience, although I didn't entirely get the behavior I was going for - there are some limitations that make it impossible to do with a&amp;nbsp;MSI in Windows Vista, but still possible in a single download.&amp;nbsp; (More on that later).&lt;/P&gt;
&lt;H2&gt;The technical details&lt;/H2&gt;
&lt;P&gt;All MSIs elevate on Windows Vista by default.&amp;nbsp; However there is a &lt;A href="http://msdn2.microsoft.com/en-us/library/aa372870.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa372870.aspx"&gt;flag that you can set&lt;/A&gt; that will tell MSI that you don't need to elevate.&amp;nbsp; The 3rd bit of the word count summary property can be set by using the msiinfo tool (comes with the platform SDK).&amp;nbsp; Since I also used an embedded cab, that means my word count summary property should be set to 10 (8 | 2 == 10).&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Consolas size=2&gt;msiinfo RunAsNewUser.msi -w 10&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You need to have the feature include both the per-user and per-machine information if you're trying to put both in one package like I did (not a best practice - more on that later).&amp;nbsp; &lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Feature&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAsNewUser&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Title&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Run as New User&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Level&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;1&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.cmd&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.cmd&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;ComponentRef&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Feature&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&lt;FONT face=Consolas&gt;&amp;gt;
&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Your standard MSI that installs to the system directories doesn't face the (fairly simple) issues involved.&amp;nbsp; Here's the per-machine version of my components (you need two versions of the components in order to put them in different directories(*). [I build all my MSIs using &lt;A href="http://wix.sourceforge.net/" mce_href="http://wix.sourceforge.net/"&gt;Wix&lt;/A&gt; - it gives me fine-grained control for making really solid MSIs and it tends to match the way I want to think about MSIs.]&lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;      &amp;lt;!--&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; We need a per-machine version as well, with seperate components &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;--&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;ProgramFilesFolder&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;AdTools&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.Microsoft&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Microsoft&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.Runas&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAs&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;9D448C8B-AF67-423B-9622-D9720770B61E&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;File&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;DiskId&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;1&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;ALLUSERS&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;98A7DE3E-EF1D-434F-80CB-2F878CD0E9F5&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;SystemFileAssociations\.exe\shell\Run as new user...\command&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCR&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Action&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;createAndRemoveOnUninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuserCommand.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;expandable&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;"[#pm.runasnewuser.cmd]" "%1" %*&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;/&amp;gt;
              &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;ALLUSERS&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;20D758CC-2774-4532-BD6D-E7C378761C90&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;SystemFileAssociations\.msc\shell\Run as new user...\command&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCR&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Action&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;createAndRemoveOnUninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pm.runasnewuserCommand.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;expandable&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;"[#pm.runasnewuser.cmd]" "%1" %*&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;/&amp;gt;
              &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;ALLUSERS&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&lt;FONT face=Consolas&gt;&amp;gt;
&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Notice that I made these components conditional on &lt;FONT face=Consolas&gt;&lt;EM&gt;ALLUSERS&lt;/EM&gt;&lt;/FONT&gt;.&amp;nbsp; We'll make the per-user version conditional on &lt;FONT face=Consolas&gt;&lt;EM&gt;NOT (ALLUSERS)&lt;/EM&gt;&lt;/FONT&gt;.&amp;nbsp; This is pretty basic stuff, and is more or less simply specifying what goes where without much specialized stuff.&amp;nbsp; You can do a per-user setup that looks quite similar by putting it somewhere that isn't off the user's profile.&amp;nbsp; I decided to put mine in the user's profile which means a little extra baggage.&lt;/P&gt;
&lt;P&gt;So we're basically done right?&amp;nbsp; Well, not really, no.&amp;nbsp; We've disabled the elevation, but now you need to make your installation not require elevation.&amp;nbsp; Things like installing to &lt;EM&gt;Program Files&lt;/EM&gt; require admin rights, so we'll need to install to somewhere else.&amp;nbsp; I'm not really sure where that should be - probably %UserProfile%\ProgramFiles or something like that.&amp;nbsp; In this example, I installed to LocalAppData.&lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;LocalAppDataFolder&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;AdTools&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Microsoft&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Microsoft&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Runas&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAs&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;06A57A74-7639-4A96-A1FF-6C434ED50CEF&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;File&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;runasnewuser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;DiskId&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;1&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;runasnewuser.cmd&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.cmd.keypath&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCU&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Software\Microsoft\RunAs\KeyPaths&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAsNewUser.cmd&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RemoveFolder&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Runas&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Runas&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;On&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;uninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;/&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RemoveFolder&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Microsoft&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.Microsoft&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;On&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;uninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;/&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;NOT (ALLUSERS)&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;C0DB0776-441A-4AB9-871A-5AF1F326FA0A&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;SystemFileAssociations\.exe\shell\Run as new user...\command&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCR&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Action&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;createAndRemoveOnUninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuserCommand.exe&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;expandable&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;"[#pu.runasnewuser.cmd]" "%1" %*&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.keypath&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCU&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Software\Microsoft\RunAs\KeyPaths&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAsNewUser.reg&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;NOT (ALLUSERS)&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;C5B94A3B-7D87-4FC0-AC28-111B86679251&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;SystemFileAssociations\.msc\shell\Run as new user...\command&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCR&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Action&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;createAndRemoveOnUninstall&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
                &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuserCommand.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;expandable&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;"[#pu.runasnewuser.cmd]" "%1" %*&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryKey&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;pu.runasnewuser.reg.msc.keypath&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;HKCU&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;Software\Microsoft\RunAs\KeyPaths&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;RunAsNewUser.reg.msc&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;=&lt;/SPAN&gt;'&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;yes&lt;/SPAN&gt;'&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt; /&amp;gt;
              &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;&lt;/SPAN&gt;NOT (ALLUSERS)&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Condition&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
            &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Component&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
          &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&amp;gt;
      &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;Directory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&lt;FONT face=Consolas&gt;&amp;gt;&lt;/FONT&gt;
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;The extra baggage is the HKCU keypath RegistryValue, and the RemoveFolder entries.&amp;nbsp; Nothing crazy, but a little extra to be aware of.&amp;nbsp; These are necessary because of things like roaming profiles.&lt;/P&gt;
&lt;H2&gt;The experience&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;You can install it and it goes through without any elevation.&amp;nbsp; The installation is per-user by default.&amp;nbsp; (Yay! Per-user works and has a smokin' experience, and supports all kinds of scenarios.)&lt;/P&gt;
&lt;P&gt;If you want to install it per-machine, you need to launch it via this command: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Consolas&gt;msiexec /i RunAsNewUser.msi ALLUSERS=1&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This is obviously not ideal - but there's a hidden hiccup.&amp;nbsp; I thought that it would prompt for elevation if you specified ALLUSERS=1 - it does not.&amp;nbsp; You get this error message:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="MARGIN: 5px" height=197 alt="You do not have sufficient privileges to complete this installation for all usrs of the machine." src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/MakinganMSIthatdoesntneedaUACLUAprompt_1361C/image_2.png" width=398 mce_src="http://blogs.msdn.com/blogfiles/jamesfi/WindowsLiveWriter/MakinganMSIthatdoesntneedaUACLUAprompt_1361C/image_2.png"&gt; &lt;/P&gt;
&lt;P&gt;It's not the end of the world.&amp;nbsp; If you run the same command from an already elevated process (e.g. an elevated command prompt) the installation goes through just fine (as the error message implies).&amp;nbsp; It's a bit of a shame, but I've confirmed with Carolyn that you can't build a single package that will elevate sometimes and sometimes not (because the flag is in the MSI summary information it can't be changed in-flight).&lt;/P&gt;
&lt;H2&gt;The best practice for building a per-user (without elevation) &lt;EM&gt;and &lt;/EM&gt;per-machine app (with elevation)&lt;/H2&gt;
&lt;P&gt;Because of the limitations noted above, here's what is the best practice for building a per-user &lt;EM&gt;and &lt;/EM&gt;per-machine app:&amp;nbsp; Have a bootstrapper exe, and two separate&amp;nbsp;MSIs (one per-user package and one per-machine package).&amp;nbsp; If these are embedded in the bootstrapper exe as resources that are extracted at install, then you can a single download that installs either as per-machine or per-user.&lt;/P&gt;
&lt;P&gt;Why?&amp;nbsp; Well, not many folks are trying to do this at the moment.&amp;nbsp; Of course, more will as Vista is on more and more computers - ultimately I think this is a huge step forward for keeping your computer free of malware.&amp;nbsp; I think it's worth saying twice: I feel much better installing a program that doesn't require elevation to install - at a minimum I know it's not disabling my anti-malware software.&lt;/P&gt;
&lt;H2&gt;Other Resources&lt;/H2&gt;
&lt;P&gt;&lt;A title=http://blogs.msdn.com/windows_installer_team/ href="http://blogs.msdn.com/windows_installer_team/" mce_href="http://blogs.msdn.com/windows_installer_team/"&gt;http://blogs.msdn.com/windows_installer_team/&lt;/A&gt;&amp;nbsp;- Get it straight from the horse's mouth&lt;/P&gt;
&lt;P&gt;&lt;A title=http://blogs.msdn.com/astebner/archive/2006/12/13/some-useful-things-i-have-learned-about-windows-installer-and-uac.aspx href="http://blogs.msdn.com/astebner/archive/2006/12/13/some-useful-things-i-have-learned-about-windows-installer-and-uac.aspx" mce_href="http://blogs.msdn.com/astebner/archive/2006/12/13/some-useful-things-i-have-learned-about-windows-installer-and-uac.aspx"&gt;http://blogs.msdn.com/astebner/archive/2006/12/13/some-useful-things-i-have-learned-about-windows-installer-and-uac.aspx&lt;/A&gt;&amp;nbsp;- Good intro article that doesn't bury you in information like Roberts' (great) blog entries&lt;/P&gt;
&lt;P&gt;&lt;A title=http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-answers-to-questions-in-comments-from-earlier-blog-posts.aspx href="http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-answers-to-questions-in-comments-from-earlier-blog-posts.aspx" mce_href="http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-answers-to-questions-in-comments-from-earlier-blog-posts.aspx"&gt;http://blogs.msdn.com/rflaming/archive/2006/10/01/uac-in-msi-notes-answers-to-questions-in-comments-from-earlier-blog-posts.aspx&lt;/A&gt;&amp;nbsp;- Summary of Robert's huge series about MSI and UAC&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx"&gt;http://blogs.msdn.com/rflaming/archive/2006/09/30/778690.aspx&lt;/A&gt;&amp;nbsp;- Robert gives his take on the question: Should I write my installer as a Standard User install? If yes, how?&lt;/P&gt;
&lt;HR&gt;

&lt;P&gt;*&amp;nbsp;I imagine that you don't really need two versions of the components because I imagine that you could change the directory location using a custom action that set it, but I just found things a lot simpler if I used two different components&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2387093" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/malware/default.aspx">malware</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/LUA/default.aspx">LUA</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Setup/default.aspx">Setup</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Wix/default.aspx">Wix</category></item><item><title>How to launch an un-elevated process from an elevated process</title><link>http://blogs.msdn.com/jamesfi/archive/2007/04/11/how-to-launch-an-un-elevated-process-from-an-elevated-process.aspx</link><pubDate>Thu, 12 Apr 2007 07:11:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2095260</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/2095260.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=2095260</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=2095260</wfw:comment><description>&lt;p&gt;This question has come up a fair amount lately.&amp;nbsp; The short answer is that you don't&lt;strong&gt;*&lt;/strong&gt;&amp;nbsp;- instead you should:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;first launch an unelevated process&lt;/li&gt; &lt;li&gt;have that unelevated process launch an elevated process and wait for it to finish (or use some form of IPC)&lt;/li&gt; &lt;li&gt;have that unelevated process then do what you wanted the elevated process to un-elevate and do&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;OK, but why?&amp;nbsp; When you elevated there's a good chance that you &lt;em&gt;also changed users&lt;/em&gt;.&amp;nbsp; If you simply had a way to generate the split token associated with the elevated user, then you would be running as the wrong user.&lt;/p&gt; &lt;p&gt;This is all documented, of course, in the &lt;em&gt;&lt;a href="http://www.microsoft.com/downloads/thankyou.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;/em&gt; document (I hate sentence names).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;*&lt;/strong&gt; Caveat:&amp;nbsp; &lt;/strong&gt;There is still a way to launch a process as that original user with the split token - use task scheduler (see the linked document for the source code).&amp;nbsp; I don't recommend using task scheduler (I recommend the process above), but there are times when your choices are limited.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2095260" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/LUA/default.aspx">LUA</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/UAC/default.aspx">UAC</category></item><item><title>UAC UI on oldnewthing - what the colors mean</title><link>http://blogs.msdn.com/jamesfi/archive/2007/03/31/uac-ui-on-oldnewthing-what-the-colors-mean.aspx</link><pubDate>Sun, 01 Apr 2007 01:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2001778</guid><dc:creator>jamesfinnigan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jamesfi/comments/2001778.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jamesfi/commentrss.aspx?PostID=2001778</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jamesfi/rsscomments.aspx?PostID=2001778</wfw:comment><description>&lt;P&gt;I mentioned recently that I was the new owner of the UAC UI (from the dev side).&amp;nbsp; Well, today I found that &lt;A href="http://blogs.msdn.com/oldnewthing/archive/2007/03/30/1991616.aspx" mce_href="http://blogs.msdn.com/oldnewthing/archive/2007/03/30/1991616.aspx"&gt;Raymond Chen's blog&lt;/A&gt; has brought up the topic of what the colors mean.&amp;nbsp; I hadn't even really noticed that the dialogs changed much before taking ownership of the code, and due to the ease of repurposing attacks there is little comfort in seeing that a particular item is signed.&amp;nbsp; It's a good first pass, but I definitely think we have room for improvement in creating valuable distinctions&amp;nbsp;and conveying that information to the user.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2001778" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jamesfi/archive/tags/LUA/default.aspx">LUA</category><category domain="http://blogs.msdn.com/jamesfi/archive/tags/UAC/default.aspx">UAC</category></item></channel></rss>