As George has mentioned in his blog, the VC++ Runtime binding has been changed since VC++ 2008 SP1. Now by default the manifest contains a reference to the RTM version of CRT.
The msdn article has a section How to Bind to Specific Versions which states as follows:
If you want to force your application to require that the latest libraries be installed on your computer, use one or more of the following lines of code:
#define _BIND_TO_CURRENT_CRT_VERSION 1
#define _BIND_TO_CURRENT_ATL_VERSION 1
#define _BIND_TO_CURRENT_MFC_VERSION 1
#define _BIND_TO_CURRENT_OPENMP_VERSION 1
We recently heard from some of our customers that they are not able to bind to “specific” version rather than “current” versions of CRTs. This needs some clarification.
When the user defines the *CURRENT* macros, the generated manifest for his/her application will contain a reference to the ‘current’ version that is on the visual studio machine (not the RTM one). The part ‘specific’ here is just used to differentiate from ‘rtm version’ which means “any version rtm or later can be used”. ‘Specific’ does not mean ‘any version of the user’s choice’, rather it means ‘require this specific (current) version or later’.
The macro _BIND_TO_CURRENT_VCLIBS_VERSION needs to be defined if your application have a dependency on a certain Visual C++ libraries update installed on the machine. The update might be SP1 or just a QFE. Defining it prevents the application from starting if the SP1 (or later) runtimes are not present. This can be an easier way to diagnose incompatibility problems rather than random crashes down the road.
This macro binds to the ‘current’ version. So, if you have SP1, the SP1 is the current version. If you have SP1+QFE1, QFE1 version is the current version. And so on…
See Also :
Troubleshooting Manifest-Related Issues
Content developed by: Prabhat Tandon
Content reviewed by: George Mileka