Thursday 5 November 2009, 9:02 AM
Microsoft's Program Compatibility Assistant (PCA)
One section caught my eye - the Program Compatibility Assistant, which is part of the Windows 7 OS and monitors how applications install and how application behave in a run-time environment.
In Microsoft's own words;
"The Program Compatibility Assistant (PCA) is a feature in Windows Windows 7 and Windows Server 2008 that can make older programs that have compatibility problems work better in an automated manner. PCA monitors programs for known issues. If an issue is detected, PCA notifies the user of the problem and offers to apply solutions that will be effective before the user runs the program the next time."
There are a number of features to the PCA including;
Detecting Failures in Setup Programs
Detecting Program Failures under UAC
Detecting Program Failures While Trying to Launch Installers
Detecting Installers That Need to Be Run as Administrator
Detecting Legacy Control Panels That Might Need to Run as Administrator
Detecting Program Failures Due to Deprecated Windows Components
Detecting Unsigned Drivers on 64-Bit Platforms
I thought I had a pretty good handle on the installation, legacy control panel issues, administrator requirement scenarios and the 64-bit driver installation issues but the Deprecated components area needed some more research.
I have seen the PCA pop-up dialog boxes a number of times, most commonly to advise the user that the application in question required access to a DLL that is no longer available on Windows Vista; a prime example is an application having a dependency on MSVBM50.DLL.
This got me thinking; What algorithm is the PCA using to determine a missing/deprecated component?
Is it;
1) Comparing missing dependencies against a list known missing DLL's?
- If so, are these files documented somewhere?
2) Hooking in the EXE loader (NT.DLL) and logging all failed loads
My thinking is that this is a bit reactive. We should be able to, prior to deployment be able to determine which applications will experience runtime PCA issues relating to deprecated components.
I suggest the following analysis. Each package should have all of its dependencies listed for each file contained in the target application package against;
- The target operating system
- All deployed middleware
- What files are contained within the package
Remember, this not about Windows 7 compatibility, but about your build of Windows 7, your middleware in your environment and your packages.
References:
Microsoft Compatibility Assistant: http://msdn.microsoft.com/en-us/library/bb756937.aspx
Microsoft Application Compatibility Cook Book: http://www.microsoft.com/downloads/details.aspx?FamilyId=69C63073-FE3F-47C3-BAA5-B37943AFE227
Comments on this post
See this type of problem arises because ms & the developer community for the windows space chose to make there applications dependent on the operating system, instead of making the applications self standing.
The operating system is nothing more than a launching platform but somewhere along the line they have lost site of this, system dependent component use was and still is a bad idea.


