Thursday, April 26, 2012

Microsoft Visual C++ Redistributable Runtime Hell

Microsoft has a nice knack of making problems where there are none.  C++ redistributables/runtimes is one such case.  Ever tried debugging a missing/incorrect redistributable (runtime) version issue?  Don't.

I've been unable to locate ANY meaningful description of what is a runtime compared to a redistributable and the million or so versions that show up in Add/Remove programs.  Don't take what I describe below as definitive, merely it is my best guess as to what is what, where, and why.  Redistributables/runtimes are nothing new in Visual Studio 2010, but I'm limiting my comments to that version simply because it is all that I have the patience to dwadle with at the moment.  I'm also assuming x86, although I presume the same versioning applies to x64.

Runtime or Redistributable? 
If you have the development environment installed, it is likely that you will see BOTH installed.  It appears that runtimes are installed as part of IDE service packs, redistributables are installed independently and separately from the IDE.  On a non-development machine, you will probably only see redistributables installed (which includes the runtime).

Version Please?
Would it kill Microsoft to actually include a meaningful and corresponding SP VERSION in the name?  There are SPECIFIC VERSIONS of the redistributable that correspond with SPECIFIC VERSIONS of the compiler that was used to build the actual executable.  None of this is apparent in the name, description, or listed version from Add/Remove programs.

Built with: Visual Studio 2010
Redistributable name: Microsoft Visual C++ 2010 x86 Redistributable
Redistributable version: 10.0.30319
Location: http://www.microsoft.com/en-us/download/details.aspx?id=5555

Built with: Visual Studio 2010 SP1
Redistributable name: Microsoft Visual C++ 2010 x86 Redistributable
Redistributable version: 10.0.40219
Location: http://www.microsoft.com/en-us/download/details.aspx?id=8328

What I have found is that if your executable was built with VS 2010 SP1 you MUST HAVE the SP1 redistributable installed (40219); the non-SP1 version of the redistributable installed (30319) is insufficient.
 
What a nighmare.