Share via


Missing api-ms-win-core-* DLLs

Question

Thursday, February 25, 2016 7:41 PM | 5 votes

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).

All replies (22)

Friday, February 26, 2016 4:31 AM ✅Answered | 7 votes

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 5:35 AM ✅Answered | 1 vote

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.


Thursday, March 17, 2016 11:58 AM | 8 votes

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 7:13 PM

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 9:15 PM

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


Tuesday, December 27, 2016 1:54 PM | 2 votes

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 4:12 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


Sunday, March 12, 2017 11:10 PM | 5 votes

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. 


Tuesday, August 29, 2017 1:04 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


Thursday, December 21, 2017 8:41 PM | 1 vote

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.


Friday, December 22, 2017 3:31 AM | 1 vote

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 4:41 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


Saturday, December 23, 2017 6:17 PM

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. 


Tuesday, December 26, 2017 10:07 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


Thursday, April 5, 2018 3:07 PM

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


Wednesday, April 25, 2018 12:53 PM

yes it worked for me, I agree their is misinformation


Wednesday, April 25, 2018 1:24 PM | 3 votes

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.


Tuesday, June 25, 2019 7:36 AM

Thank you for your answer:

in my code, if i use  #pragma  comment(lib,"Mincore.lib") ,Can run on my computer (win10), can not run on other computers (win7),and Show missing:

  api-ms-win-core-heap-l2-1-0.dll

  api-ms-win-core-libraryloader-l1-2-0.dll

Can run on my computer, but did not find the above file (in win10), Very strange.

i use api :GetFileVersionInfoSize(),GetFileVersionInfo(),VerQueryValue()  (W versions).

but if i use #pragma  comment(lib,"version.lib") , exe Can run (win10 and win7), and not Show missing *.dll


Tuesday, June 25, 2019 3:21 PM | 1 vote

This isn't strange.

The library version.lib was the original library used for these functions. It is probably the one that has been available since Windows NT 3.1.

The API set library (mincore.lib) was designed to be platform independent. On other platforms, like Windows Phone, IoT and embedded, kernel32.dll may not even exist.

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.


Sunday, June 30, 2019 1:58 PM

6.5 years now ... we just got screwed by this too


Thursday, December 5, 2019 11:23 PM

So why the missing dll prompt ?

leo


Friday, December 6, 2019 6:30 AM

Easy, because the OP was using a version of Windows which didn't support the API Set contract listed since Microsoft listed the API Set import library rather than the Windows Desktop import library.

As an interesting note, they currently list version.lib as the library for these functions. So at the very least they have fixed the 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.