Solution of "msvcr80.dll missing" in vc++ project

    General discussion

  • Solution to this Problem is very simple. But By just simply copying the missing dll in system32 folder or to the folder containing exe will not solve the problem. When you run your exe file dll loader search for the dll required by this file.It rather searching dll directly it first read the manifest file of your exe this manifest file is a kind of map or protocol to tell which dll is to be loaded for your exe. If the information about the dll required by your exe is missing in manifest than dll loader will generate error that following dll is missing.

    Now before telling you how to solve this problem i would like to share some information regarding dll files and manifest. There are two types of dll public dll and private dll. Public dlls are installed in windows/winsxs folder these dll can be utilized by any windows application. Private dlls are installed in the folder containing exe file. In windows structure it is preferred not to mix private dll with public dlls.So while installing application no private dll is installed in winsxs folder. Now dll loader do not load dll directly whether it is private or public. It first reads set of instruction written in the manifest. Manifest is a kind of map or permission to the dll loader to load the dll.Each public dll is associated with its manifest file which is also installed in winsxs folder. Now you need to add dependency of manifest of missing dll in your exe manifest. So dll loader will first read your exe manifest and then will read the missing dll's manifest and load the dll.

    exe.manifest------->dll's manifest-------->load dll

    now solution to your problem:

    1) Before you build your exe file.( in vc++ 2008) go to project->project Properties->configuration properties->Manifest tool->Input and output

    in right window select NO in "embed manifest".After this compiler will not embed manifest with exe but put manifest in the same folder where exe is created.

    2)now Rebuild the project. In the exe file folder you will file file named as my.exe.manifest.

    3)now download the msvcr80.dll and its manifest from following link.

    4) unzip the files in the folder in which your exe file build.

    5)open your my.exe.manifest in notepad by using open as option by right clicking.

    6) it may look like this :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
          <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>



    this is XML code

    7) now in this manifest add these line at the end before </assenbly>

          <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    now save the file and close

    the dll error will vanish surely.





    Sunday, November 14, 2010 2:17 PM