November 4, 2005

Using the VC 2005 shared CRT/MFC (DLL) without a manifest is not supported!

If you build your app with VC2005 and you accidently have disabled the embedding of the manifest file (or deleted the separate appname.exe.manifest file), you will get an error on XP and later!

This has to do with the checking for a valid manifest of the EXE inside the CRT/MFC DLLs “DllEntry” (via a call to _check_manifest). If the OS supports manifests (or better Side-By-Side assemblies/DLLs) the CRTs´ DLL forces the check of the EXEs´ manifest. If there is no (valid) manifest, then the DLL refuses to load (returns 0) and therefor the EXE cannot be started. It might display the following error message (or similar):
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application’s support team for more information.

But in the following cases the manifest checking inside the CRT-DLL is not done:

  • Pre-fusion OS (FindActCtxSectionStringW not found in kernel32.dll)
  • Loaded by instrumented-mscoree.dll (mscoree.dll and pgort80.dll is already loaded)
  • The path returned with GetModuleFileNameW of the DLL is longer than 8000 characters
  • The path to the DLL, returned by GetLongPathName is longer than 8000 characters

Posted 2 years, 2 months ago on November 4, 2005
The trackback url for this post is http://blog.kalmbachnet.de/bblog/trackback.php/54/

Comments have now been turned off for this post