Thread: Repairing Manifests in DLL Files

  1. #1
    Registered /usr
    Join Date
    Aug 2001
    Location
    Newport, South Wales, UK
    Posts
    1,273

    Angry Repairing Manifests in DLL Files

    Hello,

    I'm trying to use the 64-bit version of Avisynth on my laptop (Windows 7 x64). One of its dependant DLLs was compiled with Visual C++ 2005 and won't load for some reason.

    I tried opening it in Dependency Walker and found that it believes that MSVCR80.dll is missing, even though thanks to WinSxS there is in fact three different versions available to the system.

    The DLL's embedded manifest looks like this:-
    Code:
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
      </dependency>
    </assembly>
    I've tried a few things to get around this, namely installing the 2005 SP1 redistributable, deleting the manifest from the file and including a seperate manifest from a working DLL, none of which have worked. Curiously, as I use VS 2005 on another computer, my own applications do not have this problem.

    Anyone got any other ideas, aside from compiling it myself?

    On a seperate note, I would like to find whoever thought SxS was a good idea, grab them by whatever hair they have on their body and lift them by it just a couple inches off the ground, so that they have an idea what not having the very specific version of a DLL that changes very little over its minor revisions has felt like.

  2. #2
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Open up WinSxS and do a search for vc80. You should see a folder name something like [ x86 / amd64 ]_microsoft.vc80.crt_<hash>_8.0.50727.762_none_<has h> that will contains the required DLLs. For instance this is the amd64 CRT.

    amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.5072 7.762_none_c905be8887838ff2
    - msvcm80.dll
    - msvcp80.dll
    - msvcr80.dll

    The x86 version will being with x86_.

    To fix this you can either install MSVS 2005 on the machine or you can create a setup and deployment app that will copy the required runtimes to the WinSxS folder of the system. If you are getting a side by side linking error the error will be in your Event log and will tell you what is wrong.

    EDIT: Note that the space will not be in 50727.762. The board put it there.

    Another simple fix is to copy the folder from your machine over to the machine where you want the application to run. This is essentially what setup and deployment does for you. And yes I agree with you this is a major PITA. They changed the way 2005+ linked. I believe I heard they are moving back to the old linking style (pre-MSVS 2005) in the next version.
    Last edited by VirtualAce; 08-26-2012 at 11:20 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Drag and Drop files/Read and write files
    By ScoutDavid in forum C Programming
    Replies: 2
    Last Post: 01-13-2011, 12:14 PM
  2. Multiple Source Files, make files, scope, include
    By thetinman in forum C++ Programming
    Replies: 13
    Last Post: 11-05-2008, 11:37 PM
  3. Linking header files, Source files and main program(Accel. C++)
    By Daniel Primed in forum C++ Programming
    Replies: 3
    Last Post: 01-17-2006, 11:46 AM
  4. Manifests and Comctl32.dll v6
    By reanimated in forum Windows Programming
    Replies: 0
    Last Post: 09-27-2005, 08:04 AM
  5. 2k/XP manifests... sign here, please :p
    By SMurf in forum Windows Programming
    Replies: 2
    Last Post: 09-04-2002, 12:08 PM