none
Missing api-ms-win-core-* DLLs

    Question

  • As described in question 35562218 on StackOverflow and my other question on the Microsoft Community forum (sorry - I can't post links until my account is verified) I am missing the following DLLs:

    • api-ms-win-core-libraryloader-l1-2-1.dll
    • api-ms-win-core-atoms-l1-1-0.dll
    • api-ms-win-core-winrt-error-l1-1-1.dll
    • api-ms-win-core-sidebyside-l1-1-0.dll
    • api-ms-win-core-localization-obsolete-l1-3-0.dll
    • api-ms-win-core-heap-l1-2-0.dll
    • api-ms-win-core-heap-l2-1-0.dll
    • api-ms-win-core-delayload-l1-1-1.dll
    • api-ms-win-core-libraryloader-l1-2-0.dll
    • api-ms-win-core-rtlsupport-l1-2-0.dll
    • api-ms-win-core-shlwapi-obsolete-l1-2-0.dll
    • api-ms-win-security-base-l1-2-0.dll

    I've tried 'sfc /scannow', 'DISM.exe /Online /Cleanup-image /Scanhealth' and 'DISM.exe /Online /Cleanup-image /Restorehealth' to locate/fix missing files but it hasn't worked. I've got Visual C++ Redist x86 and x64 installed for 2008, 2010, 2012, 2013 and 2015 and I've got Visual Studio 2010 Express and Visual Studio 2010 Prerequisites x64 as well as Windows 7 SDK (7.0 and 7.1). I've search my entire hard drive for those DLLs but can't find them.

    I've seen question "api-ms-win-core-libraryloader-l1-2-0.dll is missing" on this forum but I'm not trying to create a UWP and besides, I don't seem to have Windowsapp.lib either nor do I want it. I've seen many other posts indicating the missing DLLs should be in the C:/windows/(system32 or sysWOW64)/downlevel folder but they aren't there.

    The API Sets sound like they might be what I'm looking for but I don't know where I can download those - I can only find a page telling me about them.

    Surely these should be part of a library or SDK or something (other than Windowsapp.lib)? They've been mentioned as far back as Win 7. Where can I get them from?

    Any constructive suggestions would be greatly appreciated (download from dodgydllwebsite.com would not be appreciated).

    Thursday, February 25, 2016 7:41 PM

Answers

  • You are not missing those DLLs.

    Those DLLs are Windows's implementation detail and are subject to change at anytime. Basically Microsoft started moving around APIs starting from Windows 8. For example, APIs in Windows 8's api-ms-win-core-file-l1-2-0.dll got moved to api-ms-win-core-file-l1-2-1.dll in Windows 8.1. Old software still work because the dlls developer linked to are now just placeholders redirecting calls to the actual implementation. But nobody should link to the implementations directly, as that would be defeating the purpose of having such a redirection. Any software that report those dlls are missing are failing to accommodate the redirection (e.g. reporting a delay-loaded dependency as hard one). 

    Don't try to obtain those dlls. The only supported way to get those DLLs is to do a major Windows upgrade (e.g. from Windows 7 to Windows 10). Distributing those files is against Windows end user agreement, and those files you get from a higher version of Windows won't work if your Windows version is too low.

    If you are a developer, just use the APIs documented in the Windows SDK (unless absolute necessary like writing antivirus) and do not take any dependency on those dlls, as they may only exist in one Windows version. Those APIs may or may not use the DLLs you listed, but their dependencies are not yours to worry. You should only depend on documented APIs, not implementation details like the name of those DLL. E.g. instead of taking a direct dependency on api-ms-win-core-file-l1-2-0.dll you should take a dependency on kernel.dll which supports Windows 7 as well. 



    Visual C++ MVP







    Friday, February 26, 2016 4:31 AM
    Moderator
  • As you said, the API Sets sound like they might be. The "umbrella" libs in API sets, MinCore.lib and MinCore_Downlevel.lib are provided in the Microsoft Windows Software Development Kit (SDK) that encompasses the API surface defined in API Sets plus additional APIs that are contained in well-layered system DLLs. So try include MinCore.lib and MinCore_Downlevel.lib maybe useful. I have search in my win7 and these are in SDK directory.  But notice that binaries that link to MinCore.lib or MinCore_Downlevel.lib are not designed to work on Windows 7.

    Friday, February 26, 2016 5:35 AM
    Moderator

All replies

  • You are not missing those DLLs.

    Those DLLs are Windows's implementation detail and are subject to change at anytime. Basically Microsoft started moving around APIs starting from Windows 8. For example, APIs in Windows 8's api-ms-win-core-file-l1-2-0.dll got moved to api-ms-win-core-file-l1-2-1.dll in Windows 8.1. Old software still work because the dlls developer linked to are now just placeholders redirecting calls to the actual implementation. But nobody should link to the implementations directly, as that would be defeating the purpose of having such a redirection. Any software that report those dlls are missing are failing to accommodate the redirection (e.g. reporting a delay-loaded dependency as hard one). 

    Don't try to obtain those dlls. The only supported way to get those DLLs is to do a major Windows upgrade (e.g. from Windows 7 to Windows 10). Distributing those files is against Windows end user agreement, and those files you get from a higher version of Windows won't work if your Windows version is too low.

    If you are a developer, just use the APIs documented in the Windows SDK (unless absolute necessary like writing antivirus) and do not take any dependency on those dlls, as they may only exist in one Windows version. Those APIs may or may not use the DLLs you listed, but their dependencies are not yours to worry. You should only depend on documented APIs, not implementation details like the name of those DLL. E.g. instead of taking a direct dependency on api-ms-win-core-file-l1-2-0.dll you should take a dependency on kernel.dll which supports Windows 7 as well. 



    Visual C++ MVP







    Friday, February 26, 2016 4:31 AM
    Moderator
  • As you said, the API Sets sound like they might be. The "umbrella" libs in API sets, MinCore.lib and MinCore_Downlevel.lib are provided in the Microsoft Windows Software Development Kit (SDK) that encompasses the API surface defined in API Sets plus additional APIs that are contained in well-layered system DLLs. So try include MinCore.lib and MinCore_Downlevel.lib maybe useful. I have search in my win7 and these are in SDK directory.  But notice that binaries that link to MinCore.lib or MinCore_Downlevel.lib are not designed to work on Windows 7.

    Friday, February 26, 2016 5:35 AM
    Moderator
  • This is a really poor answer. What we need is concrete instructions on how to generate an application that does not report these as missing.

    Thursday, March 17, 2016 11:58 AM
  • You can't fix someone else's reporting error (nonexistent dependency that is). If I say your application is missing DirectX 12 dependencies and your application clearly runs fine on DirectX 9 do you believe me or believe your own tests?


    Visual C++ MVP

    Thursday, March 17, 2016 7:13 PM
    Moderator
  • In the project settings, verify that the target OS is correct and the toolchain is compatible. If in doubt, try to build a small test project. Enable the WinXP compatibility option.

    -- pa

    Thursday, March 17, 2016 9:15 PM
  • The online help for GetFileVersionInfo(), for example, has, for 4 years now, incorrectly listed mincore.lib as being required. It isn't; the correct one is version.lib. Perhaps you have a similar problem with misinformation.
    Tuesday, December 27, 2016 1:54 PM
  • This is not (totally) misinformation. Rather this is "blinkered" future-oriented view - ignoring those few retarded customers that still use ancient OS versions - like, anything older than Win10.

    I'm still trying to understand how these API DLLs work...

    The short story is that they *should* be present on any _supported_ Windows version, at least with some updates installed (see here, thanks to RLWA32).

    If they are not present on certain machine - its Windows is either unsupported or not updated. To build for these Windows versions, use Visual Studio older than 2015, which will not create references to those DLLs. Downloading stuff from dodgy dll websites is not supported. It may or may not work, at your own risk.

    Build with VC++ 2015 and WinXP compatible platform toolset seems to run on XP SP3.  I have not fully verified this, a simple "hello world" program built without VC++ runtime DLLs does run.

    Regards,

    - - pa



    • Edited by Pavel A Tuesday, December 27, 2016 4:38 PM
    Tuesday, December 27, 2016 4:12 PM
  • Can't help but be offended by "ignoring those few retarded customers that still use ancient OS versions"

    If you can't work with the public without using insults you should refrain from participating. 

    Sunday, March 12, 2017 11:10 PM
  • Hi Sheng, thanks! Just wanted to point out that these statements "nobody should link to the implementations directly, as that would be defeating the purpose" and "Any software that report those dlls are missing are failing to accommodate the redirection " sound quite funny now, because I ended up on this post after an similar error thrown by a Microsoft application: the DPM 2016 agent. It's disappointing how some Microsoft's own products fail so badly to accommodate prerequisites, and have so many limitations, while lacking proper documentation about it.

    By the way, if someone got here because of a DPM 2016 agent installation error, such as "missing api-ms-win-core-heap-l1-2-0 dll", take a look at this post:

    https://social.technet.microsoft.com/Forums/en-US/a4b0e541-65ab-47c4-bbac-9bfc492687dc/help-missing-midll-when-trying-to-install-the-agent?forum=dpmsetup

    • Edited by Victor L Lopes Wednesday, August 30, 2017 3:08 PM Forgot to point to the right thread
    Tuesday, August 29, 2017 1:04 PM
  • Seeing as how I am getting this error from Windows10upgraderApp.exe while trying to upgrade to Windows 10 from Windows 7, this answer seems to be horribly flawed.
    Thursday, December 21, 2017 8:41 PM
  • Agreed, I have received the same error while trying to do the same upgrade. MS feature to stop upgrading via this route?

    Any luck in resolving this?

    Friday, December 22, 2017 3:31 AM
  • no app targeting windows 7 should report this error as the API set used by the DLL is introduced in Windows 8. Someone must be slipping a DLL that requires Windows 8 + into that product. 

    this forum is for helping software authors here by the way, if you see the error in a software not written by yourself then you must contact the author. We can't magically make a DLL working on Windows 7, only the author can. 



    Visual C++ MVP

    Friday, December 22, 2017 4:41 AM
    Moderator
  • no app targeting windows 7 should report this error as the API set used by the DLL is introduced in Windows 8. Someone must be slipping a DLL that requires Windows 8 + into that product. 

    this forum is for helping software authors here by the way, if you see the error in a software not written by yourself then you must contact the author. We can't magically make a DLL working on Windows 7, only the author can. 



    Hello.

    The Problem is, the Windows 10 Update Assistant is spilling that error out. 

    AFAIK thats a tool an Microsoft Developer wrote.

    That error occurs, if i try to Upgrade an Notebook from Windows 7 64bit to Windows 10.

    If i visit microsofts  windows10upgrade page (cant post links..)

    and download the tool Windows10Upgrade24074, i get that error

    Error Code 0x8007007e

    Best regards, 

    Mirko

    edit: did a complete new installation, which worked. 




    • Edited by Naladdar Monday, December 25, 2017 6:12 PM
    Saturday, December 23, 2017 6:17 PM
  • In that case your question should already be asked (and most likely already answered) in the correct forum. 

    You should begin your Windows query at answers.microsoft.com, not MSDN or Technet. 



    Visual C++ MVP

    Tuesday, December 26, 2017 10:07 PM
    Moderator
  • Dear all,

    i run into the same problem today.

    Suddenly, after a clean and a build i got the ReflectionRypeLoadException. Looking at the ExceptionLoader it says that is impossible to find an assembly "name.dll" or its dependencies. Of course "name.dll" is there. Using "Dependency Walker" i can see that all these dll are not found (referenced by SPAACIS.dll)

    I'm using Visual Studio Community 2013, the pc came with Win10, no updates where installed recently.... everything worked smooth for months till today...

    Some help would be appreciated.

    Thanks

    BR1

    Thursday, April 5, 2018 3:07 PM
  • yes it worked for me, I agree their is misinformation
    Wednesday, April 25, 2018 12:53 PM
  • Misinformation is false or inaccurate information, but if you check any of the functions that the API set libraries are listed for, you will find that the function is exported from that library. For example, GetFileVersionInfo, if you check the mincore.lib for exports, you will find:

    C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x64>dumpbin /exports mincore.lib | find "GetFileVersionInfo"
                      GetFileVersionInfoExW
                      GetFileVersionInfoSizeExW
                      GetFileVersionInfoSizeW
                      GetFileVersionInfoW

    So it is true and accurate. The issue here is that the documentation is incomplete because these functions are exported by more than one import library:

    C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x64>dumpbin /exports version.lib | find "GetFileVersionInfo"
                      GetFileVersionInfoA
                      GetFileVersionInfoExW
                      GetFileVersionInfoSizeA
                      GetFileVersionInfoSizeExW
                      GetFileVersionInfoSizeW
                      GetFileVersionInfoW

    But the documentation only lists one import library and one library that the function is in, but the W versions of these functions are exported from two. So even if they had kernel32.dll and version.lib listed, you could technically class the documentation as incorrect.

    What Microsoft needs to do with the documentation is to have both the Windows API library listed and the API set library listed, only then will you have fully accurate documentation.


    This is a signature. Any samples given are not meant to have error checking or show best practices. They are meant to just illustrate a point. I may also give inefficient code or introduce some problems to discourage copy/paste coding. This is because the major point of my posts is to aid in the learning process.

    • Proposed as answer by Shinde_Sachin Wednesday, April 25, 2018 5:59 PM
    Wednesday, April 25, 2018 1:24 PM