The most common application compatibility issue that users as well as developers face is when an application fails upon checking the operating system version. A lot can go wrong when version checking is misused. A user might experience a “silent fail” where the application simply fails to load and nothing happens. Or, a user might see a dialog box indicating something to the effect of “you must be running Microsoft Windows® XP or later” when in fact, the computer is running Windows 7. Many other consequences to poor version checking can inconvenience users as well.
Applications fail due to version checking for two reasons:
- A flaw (bug) in the version checking code, which fails if the minor version is decreased, even if the major version is increased (for example, changing versions from 5.1 to 6.0) or if the expected service pack (SP) is not installed, even if you’re running a newer operating system (for example, changing versions from Windows XP SP 2 to Windows Vista® SP 1)
- An intentional blocking that prevents the application from running on operating system versions not tested by its developers (we recommend that you do not block applications from running on future operating systems)
When an application runs on an “incompatible” (due to poor version checking) version of Windows, it will generally display an error message, but it may also exit silently or behave erratically. Often, if we work around the version checking, the application will run well. End-users and IT professionals may apply a fix to let the application think it is running on an older version of Windows.
The following sections provide information about how to work around version checking compatibility issues, and how to check the operating system version. We also suggest the best overall approach: checking for operating system features instead of checking for the operating system version.
Working Around the Problem
Windows provides two mechanisms to work around the version checking problem:
- Compatibility mode: Designed for end users, compatibility mode is an easy way to work around compatibility issues. When enabled, it applies a set of compatibility fixes that provide a runtime environment more compatible with applications written for older versions of Windows. One of those fixes is the “version lie,” which makes the version query functions return the operating system version the user chose in the Compatibility tab of the Properties dialog box instead of the actual Windows version.
- Application Compatibility Toolkit (ACT): A set of application compatibility tools for IT professionals and developers, ACT provides the means to detect and debug a wide array of compatibility issues so that developers can fix them, and provides the means to work around compatibility issues by applying compatibility fixes from a list, including the “version lie” fix. ACT provides finer-grained control over what fixes are applied.