none
dll's require CRT 9.0.21022.8, 9.0.30729.1 installed from msm, but doesn't work

    Question

  •  
    I upgraded to Visual Studio Pro SP1 and we are running into VC runtime dependency problems.  We distribute CRT & MFC using the merge modules:

    C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_CRT_x86.msm
    C:\Program Files\Common Files\Merge Modules\Microsoft_VC90_MFC_x86.msm

    The upgrade moved the versions from 9.0.21022.8 to 9.0.30729.1. 

    The manifests of the compiled dll's in the solution all state that they still require 9.0.21022.8:

      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>

    I believe this means 9.0.21022.8 or higher, but includes those 9.0.30729.1 merge modules doesn't work.  Any ideas?

    We are testing on a clean instance of Windows XP Pro.  Even more confusing to me we found that it will work if we run either of the redistributable installers on the system:

    Microsoft Visual C++ 2008 Redistributable Package (x86)
    http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en

    Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
    http://www.microsoft.com/downloads/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2&DisplayLang=en

    Can anyone shed some light on this?

    I've read this blog entry a few times:
    http://blogs.msdn.com/vcblog/archive/2008/05/15/vc-runtime-binding.aspx

    Cameron

    Thursday, November 06, 2008 8:38 PM

Answers

  • The x86_redist.exe installer for the VS2008 SP1 version of the libraries installs publisher policy files that redirects requests for 9.0.21022.8 to 9.0.30729.1.  You'll find them in c:\windows\winsxs\policies.  Not so sure if the merge modules do this.  It certainly won't work if you deploy them applocal.
    Hans Passant.
    • Marked as answer by jack 321 Wednesday, November 12, 2008 2:22 AM
    Saturday, November 08, 2008 1:06 PM
    Moderator

All replies

    • Edited by ctaggart Friday, November 07, 2008 12:50 AM
    Friday, November 07, 2008 12:49 AM
  • The x86_redist.exe installer for the VS2008 SP1 version of the libraries installs publisher policy files that redirects requests for 9.0.21022.8 to 9.0.30729.1.  You'll find them in c:\windows\winsxs\policies.  Not so sure if the merge modules do this.  It certainly won't work if you deploy them applocal.
    Hans Passant.
    • Marked as answer by jack 321 Wednesday, November 12, 2008 2:22 AM
    Saturday, November 08, 2008 1:06 PM
    Moderator
  • Merge Modules do this (they do have correct rebinding).

    I prepared myself my own verison of vcredistr with Debug CRT and Debug MFC.

    I created simple empty Setup Project in Visual studio 2008 and added the following merge modules (path from my Vista 64bit machine):

    "C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC90_DebugCRT_x86.msm"
    "C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC90_DebugMFC_x86.msm"
    "C:\Program Files (x86)\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_DebugCRT_x86.msm"
    "C:\Program Files (x86)\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_DebugMFC_x86.msm"

    After compiling and installing resulting MSI on the target machine I can run my application that use debug MFC and CRT dlls.

    By the way, there are merge modules for x64 targets too.
    Monday, April 06, 2009 8:16 AM