<?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>Chris Jackson's Semantic Consonance : Application Compatibility</title><link>http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx</link><description>Tags: Application Compatibility</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Why don’t I see any data for Vendor Assessment for Windows 7 in ACT 5.5?</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/22/why-don-t-i-see-any-data-for-vendor-assessment-for-windows-7-in-act-5-5.aspx</link><pubDate>Tue, 22 Dec 2009 18:03:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9940154</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9940154.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9940154</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9940154</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/cjacks/archive/2009/11/17/windows-7-application-compatibility-list-for-it-professionals.aspx" target="_blank"&gt;A few weeks ago, I spoke about how our information on vendor data was slowly making it through the channel&lt;/a&gt;, beginning with the &lt;a href="http://windows.com/compatibility" target="_blank"&gt;compatibility center&lt;/a&gt; (complete), moving on to the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890e522e-e39e-4278-aebc-186f81e29173&amp;amp;displaylang=en" target="_blank"&gt;downloadable Application Compatibility List for IT Pros&lt;/a&gt; (complete), and finally getting to &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&amp;amp;displaylang=en" target="_blank"&gt;ACT&lt;/a&gt;. I suggested, “The target date for this integration is mid-December 2009.” To call December 22 “mid-December” is already stretching it, and yet it’s still not showing up in ACT. What gives?&lt;/p&gt;  &lt;p&gt;Well, let’s talk a little bit about the data and how it has to move through the system. In the end, it all comes from the same database. The compat center, the downloadable list, the data that feeds the upgrade advisor – all from the same source. What is taking so long to turn on the spigot for ACT?&lt;/p&gt;  &lt;p&gt;Well, the big challenge is data transformation. First, the App ID has to be translated. The 3 live services all use a new algorithm for determining an application ID. ACT hopes to transition to use this new algorithm in the next version, but it’s one of those “running in place” changes where, after spending a lot of time and money, the end result looks identical to the user, so it’s difficult to justify rushing the transition (particularly since invalidating an existing inventory full of old App IDs is a terrible idea, so the application will need to support both old and new, and be able to differentiate between them). That translation needs to be automated so it can run in perpetuity, and that process has to be build. Then, the web service that feeds ACT is the old version (v1) while the others are using a much newer version (v4), so the old web service interface has to be modified to leverage the new database feeding it. So, there are two feats of engineering that need to be implemented, tested, and proven at scale.&lt;/p&gt;  &lt;p&gt;We’re still hoping to have this done the first week of January, but vacations and winter colds are making this more challenging. Rest assured, this data is coming and we are terrible sorry for any inconvenience the delay is causing – we really do want the data to be accessible and convenient and are not neglecting the value this has to customers.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9940154" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.5/default.aspx">ACT 5.5</category></item><item><title>Windows 7 Debugging Demo: Troubleshooting the Broken Microsoft Time Zone Utility</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/16/windows-7-debugging-demo-troubleshooting-the-broken-microsoft-time-zone-utility.aspx</link><pubDate>Wed, 16 Dec 2009 20:12:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9937842</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9937842.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9937842</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9937842</wfw:comment><description>&lt;p&gt;Earlier today, I received this request from a customer:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=07fb0bd8-f390-458d-a629-6f0258ac7cdf"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=07fb0bd8-f390-458d-a629-6f0258ac7cdf&lt;/a&gt;) is a .NET 1.1 app and I have installed .NET 1.1 SP1 on Windows 7 32-bit and all .NET 1.1 SP1 security patches but it doesn't run. Gives me this error: An internal error has occurred: Object reference not set to an instance of an object&amp;quot; and then it quits.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Always being up for a challenge, I decided to have a look and see what wasn’t working. Reproducing the error is pretty straightforward. Just run the app – it’ll gladly crash for you. But the question is, why? And can you fix it?&lt;/p&gt;  &lt;p&gt;If you hit this with a debugger, you’ll find the following stack when you hit an AV:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Consolas"&gt;0:000&amp;gt; !dumpstack -ee     &lt;br /&gt;Current frame: (MethodDesc 0x2098d28 +0x1c SystemTimeZone.ConvertToTimeZoneInfoStructure)      &lt;br /&gt;ChildEBP RetAddr&amp;#160; Caller,Callee      &lt;br /&gt;0018f4f4 0206d4ab (MethodDesc 0x2098d08 +0x43 SystemTimeZone.ToLocalTime)      &lt;br /&gt;0018f55c 0206cfc0 (MethodDesc 0x2098cd8 +0x38 SystemTimeZone.Convert)      &lt;br /&gt;0018f574 0206a484 (MethodDesc 0x2e5680 +0x15c frmMain.ShowCurrentTimes_Click)      &lt;br /&gt;0018f5d8 02067686 (MethodDesc 0x2e56d0 +0x446 frmMain.frmMain_Load)      &lt;br /&gt;0018f61c 02060365 (MethodDesc 0x2e5620 +0x2ed frmMain.Main)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now, you could take a stab at this with SOS and start pulling out objects, but I didn’t believe that this would be the easiest way to solve the problem. Instead, I decided to reverse engineer the code and have a look. If you take a peek at the structure you’re trying to create from the SystemTimeZone class, you’ll find where the instance of the time zone came from – the code was rampaging through the registry looking for it. Here’s the method in question:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Consolas"&gt;public TimeZoneList()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; m_TZHash = new Hashtable();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; m_TZList = new ArrayList();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; RegistryKey key = Registry.LocalMachine.OpenSubKey(@&amp;quot;SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string[] subKeyNames = key.GetSubKeyNames();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Type t = typeof(TZIStructure);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int num2 = Marshal.SizeOf(t);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int num3 = subKeyNames.Length - 1;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt;= num3; i++)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RegistryKey key2 = key.OpenSubKey(subKeyNames[i]);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SystemTimeZone zone = new SystemTimeZone();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SystemTimeZone zone2 = zone;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.DaylightName = StringType.FromObject(key2.GetValue(&amp;quot;Dlt&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.DisplayName = StringType.FromObject(key2.GetValue(&amp;quot;Display&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.Index = IntegerType.FromObject(key2.GetValue(&amp;quot;&lt;strong&gt;Index&lt;/strong&gt;&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.MapId = StringType.FromObject(key2.GetValue(&amp;quot;MapID&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.StandardName = StringType.FromObject(key2.GetValue(&amp;quot;Std&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2.Name = key2.Name.Substring(key2.Name.LastIndexOf(@&amp;quot;\&amp;quot;) + 1);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone2 = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] buffer = (byte[]) key2.GetValue(&amp;quot;TZI&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key2.Close();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if ((buffer != null) &amp;amp;&amp;amp; (buffer.Length &amp;gt;= num2))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IntPtr ptr = handle.AddrOfPinnedObject();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; zone.TZI = (TZIStructure) Marshal.PtrToStructure(ptr, t);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; handle.Free();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!m_TZHash.Contains(zone.Index))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_TZHash.Add(zone.Index, zone);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_TZList.Add(zone);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; key.Close();      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you spend enough time with the !do command, you can eventually stumble upon the answer, but the easier approach is, again, to stay out of the debugger and leverage your favorite search engine. Here’s a KB article that points out the problem:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://support.microsoft.com/kb/935369" href="http://support.microsoft.com/kb/935369"&gt;http://support.microsoft.com/kb/935369&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Relevant information: “The Index registry value does not exist in Windows Vista and in Windows Server 2008.”&lt;/p&gt;  &lt;p&gt;Aha. See the source code above? It wants that value, and it’s not there. Root cause found.&lt;/p&gt;  &lt;p&gt;Now, on to solutions.&lt;/p&gt;  &lt;p&gt;First of all, I wonder if you need a solution at all. If you click on the clock, and then click on Change date and time settings… you will get to the Date and Time control panel. Click on the Additional Clocks tab, and you can add 2 additional clocks for 2 new time zones. If you need more, you can always use Gadgets to fill the rest of your needs. So, for most people, this should provide a built-in solution to the problem – you don’t need the app any more because the OS provides 2 solutions already.&lt;/p&gt;  &lt;p&gt;But, if you really really love that particular app, you could always copy that piece of the registry from Windows XP onto your Windows 7 computer, drop it in a new place inside of the registry, and then use the VirtualRegistry shim to redirect that app’s checks of the timezone portion of the registry to the copy you brought over.&lt;/p&gt;  &lt;p&gt;Special thanks to my friend Gov for pointing me to the KB article, and for coming up with the VirtualRegistry workaround idea.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9937842" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Flexera Software Webinar: Best Practices for Windows 7 Application Compatibility</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/15/flexera-software-webinar-best-practices-for-windows-7-application-compatibility.aspx</link><pubDate>Tue, 15 Dec 2009 16:33:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9937120</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9937120.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9937120</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9937120</wfw:comment><description>&lt;p&gt;&lt;a href="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr" target="_blank"&gt;Are your business-critical applications compatible with Windows 7? Join Microsoft's &amp;quot;App Compat Guy&amp;quot; Chris Jackson to learn best practices for how IT teams are resolving Windows 7 application compatibility issues. Hear about his experiences with early Windows 7 adopters, including the most common application compatibility issues and their root causes. Tips in this webinar will help your IT team minimize risk and make a smoother move to Windows 7.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr" target="_blank"&gt;Webinar Details&lt;/a&gt;       &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr" target="_blank"&gt;Thursday, December 17&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr" target="_blank"&gt;12pm EST (9am PST, 5pm GMT)&lt;/a&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;One curious observation I have made while doing app compat work over the past few years: The ownership of the project is assigned to the packaging team more so than any other team. Perhaps that’s because it’s the only centralized group dealing with every application, or perhaps it’s because installation failures on the new OS are the first things you notice – the rationale varies. But regardless, the team responsible for packaging definitely is an extremely interested party, if not the outright owner of the project.&lt;/p&gt;  &lt;p&gt;As a result, when I sat down for dinner with several execs from Flexera Software (makers of InstallShield and AdminStudio, among other things), they expressed this as an area of great concern for their customers. So, in between our discussion of which tapas was the tastiest (I assure you, there was some extremely tasty tapas), we were brainstorming how we can better work together to help people who are interested in packaging be more successful when an app compat project comes along.&lt;/p&gt;  &lt;p&gt;One idea? Let’s work on a webinar together. Flexera has a pretty successful webinar series, so let’s just partner up on one of those. So, on Thursday, December 17, 2009 at 11:00 am Central, we’ll be doing that. It will be relatively quick and will be presented at an overview level, so if you’re looking for a debugging deep dive this probably isn’t your best bet, but one thing it will emphatically not be is marketing speak. If this perspective is useful to you, come and join us. Feel free to ask the hardest, nastiest questions you can think of!&lt;/p&gt;  &lt;p&gt;&lt;a title="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr" href="http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr"&gt;http://mktg.flexerasoftware.com/mk/get/BPWin7CompatApp_wbnr&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9937120" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Sometimes, an apparently broken operating system is an app compat problem: Symantec solution available for “Network Path Not Found” and other errors</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/11/sometimes-an-apparently-broken-operating-system-is-an-app-compat-problem-symantec-solution-available-for-network-path-not-found-and-other-errors.aspx</link><pubDate>Sat, 12 Dec 2009 01:53:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9935983</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9935983.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9935983</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9935983</wfw:comment><description>&lt;p&gt;In the world of app compat, sometimes you get lucky and have the app itself clearly not working, and you debug it. (Well, I guess if you’re really going to get lucky, you’ll have the app just work.) Things get murkier when an app has a bad interaction with another app, but not stand-alone (in which case you could miss the interaction until you’ve deployed to end users, since labs generally start with a clean slate). This is where the finger pointing begins – the great “blame game” where each support organization points their finger at the other one.&lt;/p&gt;  &lt;p&gt;And, of course, the most fun is when you have an app compat problem where it makes it look like the operating system just plain doesn’t work. When you see a message like, “The network path was not found” or “File or network path no longer exists”, do you think app compat problem? No, you think you were sold a busted up old operating system. Sometimes you’re right. (We have bugs too.) Sometimes it’s your network. And, yes, sometimes it’s an app compat problem.&lt;/p&gt;  &lt;p&gt;Such is the case for a number of support incidents we’ve seen recently with Windows Server. We debug each one, and what we found was a deadlock in srtsp.sys / srtsp64.sys. I’ve seen deadlocks all over the place – they’re one of those equal-opportunity-style bugs, because multi-threaded programming is insanely hard to do perfectly. It just so happened that these deadlocks would rather unluckily take place on the kernel mode threads servicing SMB negotiation requests.&lt;/p&gt;  &lt;p&gt;The vendor, of course, wants happy customers, so they released a patch. If you are running older versions of Symantec Endpoint Protection 11 and Symantec Antivirus 10.2 you should get the solution from Symantec. Symantec confirms that this is a known issue and there are updates to resolve the problem. This is one of those insanely useful patches to get (as opposed to patches that fix problems that you may never see in your lifetime). See: &lt;a title="http://service1.symantec.com/SUPPORT/ent-security.nsf/docid/2007102613484948" href="http://service1.symantec.com/SUPPORT/ent-security.nsf/docid/2007102613484948"&gt;http://service1.symantec.com/SUPPORT/ent-security.nsf/docid/2007102613484948&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/windowsserver/archive/2009/12/11/symantec-solution-available-for-network-path-not-found-and-other-errors.aspx" target="_blank"&gt;My friend Robert put together a post on this over in the Windows Server Division Weblog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’m kind of disappointed that there isn’t a disturbing amount of debugger information in the post, given who wrote it (though you’ll see there is enough to communicate the message). Robert is the kind of guy where it only takes a few minutes of watching him work to realize just how profoundly dumb you are. I had one app I was debugging once, and I was just plain stuck. (It happens.) So, I asked him for his thoughts. He dumped hex to the screen, pointed to a bit of it, said, “there’s the problem, try this fix.” And he was right. (Of course, I later realized that I was just as bad when I told my friend Gov a joke in hex, and he got it.)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9935983" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Server/default.aspx">Windows Server</category></item><item><title>How to Hack your Application Compatibility Toolkit 5.5 (ACT 5.5) Database to Locate 16-bit Files in your Application Inventory</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/08/how-to-hack-your-application-compatibility-toolkit-5-5-act-5-5-database-to-locate-16-bit-files-in-your-application-inventory.aspx</link><pubDate>Tue, 08 Dec 2009 22:02:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9934290</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9934290.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9934290</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9934290</wfw:comment><description>&lt;p&gt;(Wow, I’m doing a lot more posting today than normal. Things kind of piled up while I was on leave.)&lt;/p&gt;  &lt;p&gt;There is a ton of activity going on in the world regarding Windows 7 deployments, and one of the hottest topics we’re finding is x64. People are very interested in moving to the 64-bit version of the operating system, but one obvious question is, will my applications be broken?&lt;/p&gt;  &lt;p&gt;The next version of the Application Compatibility Toolkit, ACT 6.0, is scheduled to have far more robust x64 support. (It’s scheduled to support it at all, which is already a bonus.) But what about in the interim?&lt;/p&gt;  &lt;p&gt;First of all, there is the &lt;a href="http://technet.microsoft.com/en-us/library/cc766109(WS.10).aspx" target="_blank"&gt;Setup Analysis Tool&lt;/a&gt;. This will detect 16-bit binaries (probably a problem for 64-bit Windows, unless setup is detecting the bitness of the OS and dropping file appropriately) and driver installation (possibly a problem for 64-bit Windows, unless setup is detecting the bitness of the OS and dropping files appropriately). But this requires a fair amount of work to get configured and running, and it also means that you have to have the setup files. Depending on how managed your environment is, that may be a problem.&lt;/p&gt;  &lt;p&gt;If you’re the sort that doesn’t mind undocumented secrets, I’ll let you in on one: ACT already collects the bitness of the files it finds in an inventory scan, it just doesn’t surface that in the UI today. So, how can you view this information? Why, hack the database of course. My SQL skills are so rusty these days I’m beyond embarrassed of what I crufted together, but here is a query I hacked up to display all of the files that are neither 32-bit (user mode 32-bit is probably OK) nor 64-bit (definitely OK) in your ACT database:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;USE ACT55     &lt;br /&gt;GO &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;SELECT DISTINCT Applications.appName, Static_App_Properties.fileName, fileModuleType &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;FROM Static_App_Properties     &lt;br /&gt;INNER JOIN Application_Instance_Files      &lt;br /&gt;ON Static_App_Properties.identity_hash = Application_Instance_Files.filePropertyID      &lt;br /&gt;INNER JOIN Applications      &lt;br /&gt;ON Application_Instance_Files.appID = Applications.identity_hash &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;WHERE fileModuleType&amp;lt;&amp;gt;'32BIT' AND fileModuleType&amp;lt;&amp;gt;'64BIT' AND propertyType='File' &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;ORDER BY appName     &lt;br /&gt;GO&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The schema is, as always, undocumented and subject to change, but I have found this helpful in a few scenarios to quickly zero in on apps to specifically test on 64-bit when targeting a mixed environment. I suspect you’ll have to do less hacking with ACT 6.0.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934290" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.5/default.aspx">ACT 5.5</category></item><item><title>Localized Documentation for the Application Compatibility Toolkit 5.5 (ACT 5.5) Available in 10 Languages</title><link>http://blogs.msdn.com/cjacks/archive/2009/12/08/localized-documentation-for-the-application-compatibility-toolkit-5-5-act-5-5-available-in-10-languages.aspx</link><pubDate>Tue, 08 Dec 2009 16:12:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9934103</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9934103.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9934103</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9934103</wfw:comment><description>&lt;p&gt;今日は。Guten Tag. Bonjour. ¡Hola! 안녕하세요. 你好. Ciao. Здравствуйте. Olá.&lt;/p&gt;  &lt;p&gt;I’ve been on leave for a while, so my apologies for being quiet lately. I’ve been sitting on this news for a while, though I think these links might come in handy if you are touching a global audience. We have localized the documentation for ACT into 10 different languages:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/ja-jp/library/cc722055(WS.10).aspx" target="_blank"&gt;日本語 (Japanese)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/de-de/library/cc722055(WS.10).aspx" target="_blank"&gt;Deutsch (German)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/fr-fr/library/cc722055(WS.10).aspx" target="_blank"&gt;Français (French)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/es-es/library/cc722055(WS.10).aspx" target="_blank"&gt;Español (Spanish)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/ko-kr/library/cc722055(WS.10).aspx" target="_blank"&gt;한국어 (Korean)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/zh-cn/library/cc722055(WS.10).aspx" target="_blank"&gt;汉语 (Chinese - Mainland)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/zh-tw/library/cc722055(WS.10).aspx" target="_blank"&gt;汉语 - 台灣 (Chinese – Taiwan)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/it-it/library/cc722055(WS.10).aspx" target="_blank"&gt;Italiano (Italian)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/ru-ru/library/cc722055(WS.10).aspx" target="_blank"&gt;русский язык (Russian)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/pt-br/library/cc722055(WS.10).aspx" target="_blank"&gt;Português (Portuguese – Brazil)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If there is one thing I have noticed in my travels, it’s that language is a hard barrier to cross. This is a small but important step. As group after group stretches their brains to understand my English (or my horrible Japanese), we’re taking a few more steps to meet in the middle. I’ve also been doing some work to build more labs – things with fewer words that let the products and experiences do the teaching so they are shorter and less expensive to translate, but still deliver the core knowledge. Because, no matter where you are in this little world of ours, we’re all in this together.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934103" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.5/default.aspx">ACT 5.5</category></item><item><title>Windows 7 Application Compatibility List for IT Professionals</title><link>http://blogs.msdn.com/cjacks/archive/2009/11/17/windows-7-application-compatibility-list-for-it-professionals.aspx</link><pubDate>Tue, 17 Nov 2009 15:21:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9923613</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9923613.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9923613</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9923613</wfw:comment><description>&lt;p&gt;It’s finally here!&lt;/p&gt;  &lt;p&gt;We released the Windows 7 Compatibility Center a few weeks ago. This lets you look up one application at a time. You can find that at &lt;a href="http://windows.com/compatibility"&gt;http://windows.com/compatibility&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Today, we have a downloadable list indicating vendor support. If you want to write some automated matching against your list of application, you can use this – it is an Excel download of all known information from vendors. You can find that at &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=890e522e-e39e-4278-aebc-186f81e29173&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890e522e-e39e-4278-aebc-186f81e29173&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=890e522e-e39e-4278-aebc-186f81e29173&amp;amp;displaylang=en&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The final step will be to have this information integrated directly into ACT. The target date for this integration is mid-December 2009. We’re getting there! We’re also planning to keep this data updated bi-weekly.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923613" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>How to Remove the RC Designation from the Windows 7 Reports in ACT 5.5</title><link>http://blogs.msdn.com/cjacks/archive/2009/11/06/how-to-remove-the-rc-designation-from-the-windows-7-reports-in-act-5-5.aspx</link><pubDate>Fri, 06 Nov 2009 20:56:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918803</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9918803.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9918803</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9918803</wfw:comment><description>&lt;p&gt;We shipped ACT 5.5 back in April 2009, several months before we shipped Windows 7. Helpfully (I guess) we decided to label it Windows 7 RC in the UI so you could specifically track your testing against the release candidate. We had the idea that we could update this via our web service, so that once we hit RTM we could just push out an update to modify this.&lt;/p&gt;  &lt;p&gt;And apparently we forgot to turn this little bit of code on.&lt;/p&gt;  &lt;p&gt;So, now we have a bunch of folks around the world who wonder why ACT seems to be in a beta phase and not ready for Windows 7 RTM.&lt;/p&gt;  &lt;p&gt;Well, it is ready for Windows 7 RTM, and I bet some of you would like it to look ready. We’re really sorry we can’t do that using the mechanisms we planned to use, so I figured I’d let you in on the secret to the planned update.&lt;/p&gt;  &lt;p&gt;We were going to update 2 fields in the database.&lt;/p&gt;  &lt;p&gt;So, if you want your ACT UI to look ready for the &lt;strike&gt;future&lt;/strike&gt; present, you can run this bit of SQL:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;UPDATE dbo.OS     &lt;br /&gt;SET osName='Windows 7'      &lt;br /&gt;WHERE osName='Windows 7 RC'      &lt;br /&gt;GO      &lt;br /&gt;UPDATE dbo.OS      &lt;br /&gt;SET osName='Windows Server 2008 R2'      &lt;br /&gt;WHERE osName='Windows Server 2008 R2 RC'      &lt;br /&gt;GO&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Enjoy, and sorry for the inconvenience.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918803" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.5/default.aspx">ACT 5.5</category></item><item><title>Windows 7 Compatibility Center Live on the Web</title><link>http://blogs.msdn.com/cjacks/archive/2009/10/21/windows-7-compatibility-center-live-on-the-web.aspx</link><pubDate>Wed, 21 Oct 2009 16:45:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910716</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9910716.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9910716</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9910716</wfw:comment><description>&lt;p&gt;Hooray – I can stop pasting &lt;a href="http://blogs.msdn.com/cjacks/archive/2009/09/07/faq-when-is-the-application-compatibility-list-currently-focused-on-windows-vista-going-to-be-updated-for-windows-7.aspx" target="_blank"&gt;this link&lt;/a&gt; into emails!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/windows/compatibility/en-us/default.aspx" target="_blank"&gt;The Windows 7 Compatibility Center is now live.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910716" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Using the uiAccess attribute of requestedExecutionLevel to Improve Applications Providing Remote Control of the Desktop</title><link>http://blogs.msdn.com/cjacks/archive/2009/10/15/using-the-uiaccess-attribute-of-requestedexecutionlevel-to-improve-applications-providing-remote-control-of-the-desktop.aspx</link><pubDate>Fri, 16 Oct 2009 01:47:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9907916</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9907916.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9907916</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9907916</wfw:comment><description>&lt;p&gt;I’ve run into this exact same problem 3 times now in one week, so I figure that probably doesn’t bode well and I should attempt to do something about it.&lt;/p&gt;  &lt;p&gt;With 3 different pieces of software (one of them ours), the remote control functionality is imperfectly implemented. Let’s see if this sounds familiar to anyone. You are the helpdesk. You attempt to connect to a user’s desktop. You have to elevate an application. When you do, you (the helpdesk who actually has the password) doesn’t see the UAC dialog – instead, the end user (who does not have the password) does. Even if you decide to give the user the password (it happens), you then can’t control or even see the elevated application.&lt;/p&gt;  &lt;p&gt;Kind of makes it hard to be a helpdesk when that happens.&lt;/p&gt;  &lt;p&gt;Here are the 3 solutions that I have seen to this problem:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Do nothing. That’s what our solution did. It just failed every time elevation was involved.&lt;/li&gt;    &lt;li&gt;Install a service. That’s what company X did. It requires the user to know an admin password, and that’s a problem for my customers&lt;/li&gt;    &lt;li&gt;Run the application elevated. That’s what company Y did. It requires the user to know an admin password (a problem with my customers), and also won’t allow you to interact with any windows running at System integrity level (so an incomplete solution)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here’s what I wish all 3 had done:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Manifest with uiAccess = true&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, most people don’t really understand what this is for, and the UAC manifest is typically just a copy/paste affair. But it pays for the remote desktop developer to pay attention to it. For any regular piece of software, you generally want to stay away from it – it’s dangerous, and sidesteps a significant security feature (UIPI). But if you are remoting the desktop, it’s precisely what you want – you need to be able to see everything!&lt;/p&gt;  &lt;p&gt;It’s dangerous enough, in fact, that we won’t allow you to set it without digitally signing your application. By default, you also have to have it installed in a secure location (such as Program Files). You can set a group policy to not require a secure location, but there is no option to not require a signature.&lt;/p&gt;  &lt;p&gt;However, once set up, it’s really powerful. You’ll be able to remote every possible kind of window – any integrity level at all. No more blank, unresponsive screens. Everything comes across, regardless of integrity level.&lt;/p&gt;  &lt;p&gt;You’ll also be able to leverage the group policy that lets you prompt NOT on the secure desktop if you are a UIAccess application – that way you don’t have to lose the defense in depth of using the secure desktop for normal elevation, but you also avoid writing code to remote the secure desktop when your remote desktop application is running.&lt;/p&gt;  &lt;p&gt;All in all, you are just full of win.&lt;/p&gt;  &lt;p&gt;Now, it’s my job to fix up apps that are written suboptimally, so you may be wondering how I did getting these working?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Our application, rather conveniently, used an external manifest. All I had to do was open up the manifest in Notepad, and type four characters (t-r-u-e) in the uiAccess attribute. Done. Now it works great. (Of course, everyone who downloads it will download a new broken one, so they’ll have to text edit it too – clearly we want to work with the team that makes this to fix it on their end, but you aren’t stuck – you can fix it without depending on anyone else.)&lt;/li&gt;    &lt;li&gt;Company x, the one that used a service (claiming of course that it was UACs fault that they had to do this)? I can’t fix it. They used an internal manifest, which has precedence over any external one I might lay down there. I could extract that manifest with mt.exe, edit it, and then re-inject it, but then I invalidate the digital signature. Remember that this is a non-optional requirement for a uiAccess app! So, there is nothing I can do. I’m trying to contact the vendor.&lt;/li&gt;    &lt;li&gt;Company y, the one that elevates to admin – this one I didn’t have time to examine – they do a “just in time” install and uninstall, so I couldn’t explore the manifest, but since it’s so transitive it’d be hard for me to do much anyway that would last.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Anyone writing desktop remoting applications, please consider using this. And feel free to contact me if you have questions. I would be delighted to help you.&lt;/p&gt;  &lt;p&gt;For the record, here is the corrected manifest for the one I was able to fix:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;lt;?xml version='1.0' encoding='UTF-8' standalone='yes'?&amp;gt;     &lt;br /&gt;&amp;lt;assembly xmlns='urn:schemas-microsoft-com:asm.v1'      &lt;br /&gt;&amp;#160;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;manifestVersion='1.0'&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;assemblyIdentity      &lt;br /&gt;&amp;#160;&amp;#160; version=&amp;quot;1.0.0.0&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; processorArchitecture=&amp;quot;X86&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; name=&amp;quot;Microsoft.FixedUpApp.SupportConsole&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; type=&amp;quot;win32&amp;quot;      &lt;br /&gt;&amp;#160; /&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;description&amp;gt;Fixed Up App&amp;lt;/description&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependency&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependentAssembly&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;assemblyIdentity type='win32'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; name='Microsoft.Windows.Common-Controls'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; version='6.0.0.0'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font size="2" face="Consolas"&gt;processorArchitecture='x86'     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; publicKeyToken='6595b64144ccf1df'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; language='*'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependentAssembly&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependency&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;trustInfo xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v3&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;security&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedPrivileges&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedExecutionLevel level=&amp;quot;asInvoker&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; uiAccess=&amp;quot;&lt;strong&gt;&lt;font color="#ff0000"&gt;true&lt;/font&gt;&lt;/strong&gt;&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/requestedPrivileges&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/security&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/trustInfo&amp;gt;       &lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907916" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Why You Shouldn’t Listen to Me, and Why You Should</title><link>http://blogs.msdn.com/cjacks/archive/2009/09/25/why-you-shouldn-t-listen-to-me-and-why-you-should.aspx</link><pubDate>Sat, 26 Sep 2009 01:34:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9899736</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9899736.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9899736</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9899736</wfw:comment><description>&lt;p&gt;Ah, Karma, you rise up at the least convenient times. (This blog post is not meant to imply a belief in preordained futures, divine intervention, or the existence of the Perfectly Normal Beast.)&lt;/p&gt;  &lt;p&gt;Yesterday, I had somebody ask me not to speak about something at the Springboard Virtual Round Table. I didn’t react particularly well to this particular piece of … erm … guidance, so in retribution Karma decided to pair me up with a completely drained car battery and an emergency service technician with the world’s worst sense of direction. Which of course gave me plenty of time to think about things.&lt;/p&gt;  &lt;p&gt;And I concluded that you shouldn’t listen to me, or, really, anybody. And, at the same time, you should.&lt;/p&gt;  &lt;p&gt;(Perhaps I should have put the fact that you should first, to avoid losing readers.)&lt;/p&gt;  &lt;p&gt;So, what happened?&lt;/p&gt;  &lt;p&gt;I demonstrated Access 2007 and Access 2003 running side by side. What you didn’t see is that I also sequenced (and yes, ran on Windows 7) Access 2.0. Hello 1994. If you ever attend my talks at conferences, you may see me occasionally do something like that – a quick firing up of an app that brings back a wave of nostalgia that sends approximately 5% (max) of the people in the room on a trip down memory lane, and is done quickly enough that the 95% who don’t remember that ancient piece of software aren’t annoyed. Seeing it again positively delighted me, while making me wonder how we possibly ever thought that was good. (Teal with blue shadows? Seriously?)&lt;/p&gt;  &lt;p&gt;But I was told (not asked) flat out that I could not run that. It gives the wrong impression. We are trying to convince people that App-V is not an app compat solution, and if it doesn’t run natively on the OS we don’t want to show it running in App-V, because that applies that App-V is a remediation solution.&lt;/p&gt;  &lt;p&gt;The engineer in me thought that, while I certainly don’t want to mislead people into thinking App-V is an app compat solution of any significant merit, if you try to make things cut and dry, then you’ll be disappointed. Because the reality we’re trying to portray with messaging collides rather inconveniently with the actual reality where App-V &lt;strong&gt;does&lt;/strong&gt; fix the one problem that keeps Access 2.0 from running natively on Windows 7, and you’d have to apply RunAsAdmin, CorrectFilePaths, or loosen ACLs to get it running without App-V. You see, in my world, the theory never gets to win, it’s reality that gets to win, and reality had spoken loud and clear via my perfectly functional and incredibly silly demo.&lt;/p&gt;  &lt;p&gt;But here’s the problem with that thinking: in my world, it’s my job 100% of the time to understand the system top to bottom. I have time to understand subtlety. I have the ability to dive as deep as I want, so long as it helps solve somebody’s problem somewhere. But for the rest of the world, you just want to get done. You don’t have the same luxury of time that I do. And, if my demos were the only information you ever received about App-V because you never had any more time to learn about this one little niche of technology, you’d come out having watched with your own eyes one app not being fixed by it, one app being fixed by it, and you wouldn’t know what the h*ll to think, you’d conclude that we’re all mental, and you’d go off and become a sheep farmer.&lt;/p&gt;  &lt;p&gt;As a result, it’s really important that, if we’re the only message you see, we don’t self-contradict (even though the contradiction exists only because we haven’t gone deep enough to resolve the paradox), and we give you the one high-level message that helps you make the best decision, even if the abstraction we give you is a leaky one. We’d rather err on the side of whatever approximation saves you the most time, money, and heartache if we have to approximate.&lt;/p&gt;  &lt;p&gt;The same is true of tools. I’ve looked at all kinds of output that suggests that something might have gone wrong, only to find that it works perfectly well. Believe me, the people who make these tools know that they’ll get some things wrong – they just want to get the high-level numbers that you depend on to make decisions right just as often as they can.&lt;/p&gt;  &lt;p&gt;I have the same problem when building a hypothesis while debugging an application. I use my imperfect knowledge of a huge system to make what is, hopefully, a pretty good guess about what’s going to happen next, but I’ve concluded and believed stuff really strongly countless times when one small failed assumption along the way led me to the completely wrong conclusion and I wasted a ton of my time.&lt;/p&gt;  &lt;p&gt;So, keep in mind that, while we’re always working really hard to distill this enormously complex and sometimes fiercely non-deterministic system into a set of rules you can use to actually get done with your job before we release Windows 14, that rule can be an oversimplification that isn’t always true. No matter how clever the source, nothing should trump what you see with your own eyes. A good source should always lead you to saved time, but in this world you always have to trust but verify.&lt;/p&gt;  &lt;p&gt;Also, if you ever have somebody tell you something that you don’t initially agree with, you should spend the time right then and there to understand why they believe so strongly in what they’re saying, in a respectful manner. Unless you like hanging out in parking lots waiting for service vehicles.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899736" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category></item><item><title>Springboard Series Virtual Roundtable - Windows 7 Application Compatibility Part 2: Virtualization</title><link>http://blogs.msdn.com/cjacks/archive/2009/09/23/springboard-series-virtual-roundtable-windows-7-application-compatibility-part-2-virtualization.aspx</link><pubDate>Wed, 23 Sep 2009 23:35:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9898649</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9898649.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9898649</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9898649</wfw:comment><description>&lt;p&gt;&lt;strong&gt;Date:&amp;#160; Thursday, September 24      &lt;br /&gt;Time:&amp;#160; 9:00am Pacific Time&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://ms.istreamplanet.com/springboard"&gt;https://ms.istreamplanet.com/springboard&lt;/a&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;The reviews on &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx" target="_blank"&gt;Windows 7&lt;/a&gt; have been really great so far, but you obviously can’t start using it if, after installing it, all of the stuff you need in order to get your work done breaks. Application compatibility is so important, in fact, that we managed to get &lt;a href="http://blogs.technet.com/markrussinovich/" target="_blank"&gt;Mark Russinovich&lt;/a&gt; to come and talk about it not once, but twice!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/windows/dd981014.aspx?ITPID=proplan" target="_blank"&gt;In our first episode&lt;/a&gt;, Mark talked about the overall challenge, the process, and tools to help you get there. We spoke a little bit about remediation as well, specifically in the context of what we’ve been calling the lightweight remediation. Things like shims or policy changes.&lt;/p&gt;  &lt;p&gt;Alas, I was unable to attend this event, because they kind of forgot to invite me. They didn’t forget to script me in, mind you, they just forgot to tell me about it until I already had a customer commitment (which I never back out of). All kinds of formulations on how I could get from Ottawa, ON, Canada to Seattle and back without the customer noticing then ensued, until eventually everyone realized the futility of this discussion. So I recommended &lt;a href="http://blogs.msdn.com/orange/" target="_blank"&gt;several&lt;/a&gt; &lt;a href="http://blogs.msdn.com/aaron_margosis/" target="_blank"&gt;folks&lt;/a&gt; who are far smarter than me to join the panel in my stead.&lt;/p&gt;  &lt;p&gt;Apparently all of these people were unavailable for this round, because this time, they actually not only remembered to invite me, but actually chose to.&lt;/p&gt;  &lt;p&gt;This time around, we’ll be discussing the more heavyweight fixes for app compat problems. Specifically, how does virtualization fit into your application compatibility strategies? We’ll be discussing all of the different flavors of virtualization, dispelling myths, showcasing truths, and helping you get the information you need to develop a comprehensive and sensible strategy.&lt;/p&gt;  &lt;p&gt;We hope you’re able to join us live tomorrow!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898649" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>FAQ: When is the Application Compatibility List (Currently Focused on Windows Vista) Going to be Updated for Windows 7?</title><link>http://blogs.msdn.com/cjacks/archive/2009/09/07/faq-when-is-the-application-compatibility-list-currently-focused-on-windows-vista-going-to-be-updated-for-windows-7.aspx</link><pubDate>Mon, 07 Sep 2009 14:41:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9892200</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9892200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9892200</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9892200</wfw:comment><description>&lt;p&gt;There is a huge amount of excitement about Windows 7, and people are looking to get moving with app compat immediately so they can start deploying Windows 7 right away! In the enterprise, however, there are a number of risk mitigation strategies that most administrators put into place, which typically includes (among other things) ensuring that the most business critical applications are supported on Windows 7 by the vendor.&lt;/p&gt;  &lt;p&gt;We have tried to simplify the process of finding these support statements by &lt;a href="http://www.microsoft.com/windows/compatibility/" target="_blank"&gt;creating a portal site&lt;/a&gt;, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9df23606-7276-4ce2-8993-143e101ddbcd&amp;amp;displaylang=en" target="_blank"&gt;making this list downloadable&lt;/a&gt;, and integrating it into the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&amp;amp;displaylang=en" target="_blank"&gt;Application Compatibility Toolkit&lt;/a&gt;. People like this so much that, an average of around infinity times a day, I’m asked when it’s going to be updated for Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;It is scheduled to be updated for GA (General Availability). That’s October 22, 2009.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;What’s with the delay?&lt;/p&gt;  &lt;p&gt;Well, a couple of reasons.&lt;/p&gt;  &lt;p&gt;First of all, “compatible” and “supported” are two different things. What matters to most people is supported.&lt;/p&gt;  &lt;p&gt;Before most software makers support an application, they test it pretty thoroughly to ensure that there are no significant bugs that could expose them to major risks and/or higher than acceptable support costs. This takes time. Now, we’ve been giving ISVs access to builds for quite some time, and they can use the interim builds to perform software testing and identify any significant issues which will require quite a bit of time to resolve. However, the ISV can’t even begin the thorough testing to ensure that they have a supportable solution on Windows 7 RTM until they actually had access to Windows 7 RTM. So, the same day that many enterprises were able to get that build and wanted this data, ISVs received it and could start their validation for supportability. Being able to instantaneously tell if you can afford to support your software on a given platform is asking rather a lot of any ISV. This gap between RTM and GA provides each ISV a brief window of time to perform thorough testing before customers can reasonably demand to know a support statement.&lt;/p&gt;  &lt;p&gt;We then also leverage this time to reach out to those ISVs and find the support statement. You see, ISVs don’t have to report in to us when they make new software or create new support statements – in fact, they never have to call us at all. We tried changing the nature of this relationship once with the Works With Windows Vista logo program, and it was a colossal failure. So, in addition to an ISV needing time to test and validate something, we also need time to find these results and support statements and consolidate them into the database which you can access.&lt;/p&gt;  &lt;p&gt;So, we both have a lot of work to do in order to get these lists put together, so much so that 3 months is really kind of stretching it. I know of several vendors already who are pushing out their supported dates for Windows 7 into 2010. What do I do when I find that? I debug their apps. It’s much easier to fix and support an app once the hard part – debugging it – is already done. :-)&lt;/p&gt;  &lt;p&gt;Now, compatible is a different story. If you want to be a purist, compatible means it has no bugs on the given platform. Since no bugs on a given platform is, for this purpose, the same as saying no bugs, I can safely say that there is no compatible software for any platform that has ever been made. So, we’re forced to use a different definition – compatible meaning that there are no bugs that *stop me from getting my work done* on a given platform. So, since nobody else knows precisely how you get your work done, the only person who can fairly answer that question is you.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9892200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>More Application Compatibility Resources for Windows 7</title><link>http://blogs.msdn.com/cjacks/archive/2009/08/25/more-application-compatibility-resources-for-windows-7.aspx</link><pubDate>Tue, 25 Aug 2009 22:46:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9884033</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9884033.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9884033</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9884033</wfw:comment><description>&lt;p&gt;There are a number of efforts going on to help organize application compatibility for Windows 7, in or ongoing effort to improve in this space. Now, the technical information remains fairly stable, but there are a number of different ways to organize that information based on the perspective with which you are approaching that problem.&lt;/p&gt;  &lt;p&gt;In fact, that’s probably the hardest part of talking about application compatibility – it crosses pretty much every discipline in IT, from management down the individual contributor. Even within individual contributors, it’s divided between the IT Professional and the Developer audiences.&lt;/p&gt;  &lt;p&gt;(As a side note, in nearly every audience I speak to where there are representatives of both disciplines, they tend to completely sort based on discipline. All of the IT Pros will sit on one side of the room, all of the developers sit on the other. You almost never find a situation where people are naturally distributed. And we wonder why communication between these teams, while critical, doesn’t happen as often as we would like – I know I am guilt of that myself!)&lt;/p&gt;  &lt;p&gt;So, we’re trying to organize and sort the information and knowledge for you as best we can. Here are just a few ways we have organized things to help out:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows XP to Windows 7 Migration Guidance&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/windows/ee150430.aspx" href="http://technet.microsoft.com/en-us/windows/ee150430.aspx"&gt;http://technet.microsoft.com/en-us/windows/ee150430.aspx&lt;/a&gt; – this is one way to map out information by the process itself. It’s fairly high level (no kernel debugging tips here) and more geared towards the IT Professional (hence the Technet home). Instead of a big list, there is a flowchart navigation system. Click on the stage in the flowchart you are sitting at, and it lists out resources, with pros and cons, of the tools which are there to help you through that state! Quite a clever navigation scheme.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Application Compatibility Factory&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;OK, this is one that’s confusing. I know I pick on folks in the marketing discipline from time to time, but that’s only because I think they can act in ways that are as unengineer-like as possible. Sometimes that’s good, sometimes that’s … confusing. This is one of those confusing times.&lt;/p&gt;  &lt;p&gt;We took an existing program and brand – Application Compatibility Factory. The name made sense – it used a (predominantly offshore) factory model, optimized for churning through bulk. The program for Windows Vista consisted of around 6 global system integrators.&lt;/p&gt;  &lt;p&gt;We then re-used the power of that brand on a whole new model. No, really! It doesn’t look anything like the old model – heck, it isn’t even a factory model, despite having the word Factory occupy 1/3 of the words in the name. No longer is ACF the “stroke a 7 figure check and make a big chunk of work disappear” – it’s now a program that delivers 1-week Proof of Concept engagements.&lt;/p&gt;  &lt;p&gt;Here’s basically what happens: a partner (or even Microsoft Consulting Services) comes in to your organization and begins the process of taking a software inventory. (Depending on how many desktops you have, they may not be able to finish, but they’ll be sure to let you know how you can finish up.) Next, they get you started on the process of rationalizing that inventory, so you can focus only on those applications that you specifically want to support on your shiny new operating system, and not everything someone managed to successfully install at some point in time after you handed them a computer. Finally, they do a bit of proof of concept work around remediating applications – likely not making much of a dent in that work, but at least showing you the general approach to that problem and giving you both knowledge and hope.&lt;/p&gt;  &lt;p&gt;In the end, the same partner will also be very likely to slide a proposal across the table to help you finish that work, and it’s here that they’re likely to include the factory model. But factories have almost nothing to do with the actual free engagement.&lt;/p&gt;  &lt;p&gt;Oh yeah, did I mention the free part? So, if you’re still getting started, this is a great way to leverage the investments we’re making in application compatibility and minimize your risk.&lt;/p&gt;  &lt;p&gt;To get started, in the USA you can send email to &lt;a href="mailto:usappcom@microsoft.com"&gt;usappcom@microsoft.com&lt;/a&gt;. You can also find information here: &lt;a title="http://technet.microsoft.com/en-us/windows/bb510132.aspx" href="http://technet.microsoft.com/en-us/windows/bb510132.aspx"&gt;http://technet.microsoft.com/en-us/windows/bb510132.aspx&lt;/a&gt;. This has a list of the ACF partners in many different countries. Yes, even you, Belgium.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;This is all great, but I write code&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We’ve got you covered. We recently added an FAQ section to our forums at &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/threads" href="http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/threads&lt;/a&gt; – you can find it at &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/7d585c05-0b61-45e7-b554-740382ffb7cc" href="http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/7d585c05-0b61-45e7-b554-740382ffb7cc"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/7d585c05-0b61-45e7-b554-740382ffb7cc&lt;/a&gt;. This forum is a great place to get your specific questions answered.&lt;/p&gt;  &lt;p&gt;This is just a taste of some of the organizational work we’re investing in. Keep on letting us know how we can do better! Because it’s bad enough that this stuff is hard technically, it shouldn’t be hard to find what you need!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9884033" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Why Do Some Operating System Modes Include AdditiveRunAsHighest While Others Do Not?</title><link>http://blogs.msdn.com/cjacks/archive/2009/08/20/why-do-some-operating-system-modes-include-additiverunashighest-while-others-do-not.aspx</link><pubDate>Fri, 21 Aug 2009 00:54:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9877589</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9877589.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9877589</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9877589</wfw:comment><description>&lt;p&gt;A little while back, those of us who explain application compatibility for a living and try to help people get their arms around it ran up against those who implement it in the product on the scale of … the whole earth.&lt;/p&gt;  &lt;p&gt;Those of us who explain things for a living really prefer (really, really prefer) when the system is internally consistent, because that makes it easier to explain.&lt;/p&gt;  &lt;p&gt;Those who build systems really work to make the investments they can, with finite resources, to fix the greatest percentage of applications they can.&lt;/p&gt;  &lt;p&gt;And sometimes those goals are not in alignment.&lt;/p&gt;  &lt;p&gt;Case in point: remember &lt;a href="http://blogs.msdn.com/cjacks/archive/2009/04/28/changes-to-the-operating-system-layers-compatibility-modes-in-windows-7.aspx" target="_blank"&gt;back in April when i was talking about how we added the new AdditiveRunAsHighest shim to our operating system layers&lt;/a&gt;? Well, it turns out that we didn’t touch quite all of them. The following layers have AdditiveRunAsHighest applied:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Win95&lt;/li&gt;    &lt;li&gt;Win98&lt;/li&gt;    &lt;li&gt;WinXP&lt;/li&gt;    &lt;li&gt;WinXPSP1&lt;/li&gt;    &lt;li&gt;WinXPSP2&lt;/li&gt;    &lt;li&gt;WinXPSP3&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The following layers do not have it applied:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;NT4SP5&lt;/li&gt;    &lt;li&gt;Win2000&lt;/li&gt;    &lt;li&gt;Win2000SP2&lt;/li&gt;    &lt;li&gt;Win2000SP3&lt;/li&gt;    &lt;li&gt;WinSrv03&lt;/li&gt;    &lt;li&gt;WinSrv03SP1&lt;/li&gt;    &lt;li&gt;VistaRTM&lt;/li&gt;    &lt;li&gt;VistaSP1&lt;/li&gt;    &lt;li&gt;VistaSP2&lt;/li&gt;    &lt;li&gt;WinSrv08SP1&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What’s the rhyme or reason here? Well, you can start to tease out some logical ones. First, most people don’t use compatibility modes on server apps. (They may use them on a server, such as when you use terminal services apps, but if you have a high-throughput server application, shimming it up and running it unsupported is probably not high on your list of acceptable mitigations. So, remove Server 2003 and Server 2008. Next, if it worked on Windows Vista, it has already seen UAC, so we don’t really need to have it there. But … what about NT4 and Windows 2000? If those were included, couldn’t we just say, “ever client operating system prior to Windows Vista includes this shim”?&lt;/p&gt;  &lt;p&gt;Yes, we could.&lt;/p&gt;  &lt;p&gt;And wouldn’t the same arguments that made sense for the other ones make sense here?&lt;/p&gt;  &lt;p&gt;Yes, they would.&lt;/p&gt;  &lt;p&gt;So, what gives?&lt;/p&gt;  &lt;p&gt;Well, in the game of probability (fix the most apps), internal consistency was not the focus. Fixing the largest number of apps was. And there simply were not enough apps that needed the Windows NT 4 and Windows 2000 modes to bring it on the radar that they needed them too. And those of us who do explain these things for a living didn’t notice it until July, when the bug bar was way too high to get this fix in (since it doesn’t actually block you from getting things done, it just makes it harder to explain why the system behaves the way it does).&lt;/p&gt;  &lt;p&gt;So, instead of a nice, logical rule, you have a list to memorize. 95, 98, and XP get AdditiveRunAsHighest. Everything else does not. Sorry for making you memorize a list – I’d much rather you were memorizing rules that you could logically explain, but so it goes.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9877589" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item></channel></rss>