api-ms-win-*.dll is missing
You cannot download these, and not because we would rather you did not: the file the error names does not exist as an ordinary library. Windows resolves the name internally, so dropping a copy into System32 has nothing to attach to.
What an API set actually is
Windows used to expose its functions from fixed libraries, and once a program depended on a particular file, Microsoft could never move that code again. API sets were the way out: a program links against a name like api-ms-win-crt-math-l1-1-0 and the loader looks that name up in a table built into Windows, then sends the call to whichever real library implements it in your build.
So the name is a contract rather than a file. That is why these errors mention libraries you will never find by searching your disk, and why the usual advice of downloading the missing DLL fails here even when the copy is genuine.
What actually causes it
Nearly always the Universal C Runtime. Programs built with Visual Studio 2015 or later depend on it, it ships as part of Windows, and it reaches older installs through Windows Update. A machine that is behind on updates hits this again and again with different api-ms-win names, which is the giveaway.
- Run Windows Update fully, including optional updates, and reboot. On Windows 7 and 8.1 the Universal C Runtime was delivered as a specific update, so a machine missing it needs that update rather than anything you can download from a DLL site.
- Install the Visual C++ redistributable, both architectures. It carries the runtime pieces a program needs alongside the system ones, and it is the fix in most cases where updates are current.
- Repair the system files if it persists: sfc /scannow and then DISM /Online /Cleanup-Image /RestoreHealth. The resolution table is part of Windows, so damage to Windows breaks it.
The Visual C++ runtime, with the official download and its hash
The names this happens with
They differ only in which group of functions they cover. The cause and the fix are identical for all of them, which is why there is one page rather than one per name.
- api-ms-win-crt-runtime-l1-1-0.dll
- api-ms-win-crt-heap-l1-1-0.dll
- api-ms-win-crt-math-l1-1-0.dll
- api-ms-win-crt-stdio-l1-1-0.dll
- api-ms-win-crt-string-l1-1-0.dll
- api-ms-win-crt-locale-l1-1-0.dll
- api-ms-win-crt-convert-l1-1-0.dll
- api-ms-win-crt-time-l1-1-0.dll
- api-ms-win-crt-filesystem-l1-1-0.dll
- api-ms-win-crt-utility-l1-1-0.dll
- api-ms-win-crt-environment-l1-1-0.dll
- api-ms-win-core-winrt-l1-1-0.dll
- api-ms-win-core-libraryloader-l1-1-1.dll
- api-ms-win-core-file-l1-2-0.dll
- api-ms-win-core-synch-l1-2-0.dll
- api-ms-win-core-processthreads-l1-1-1.dll
- api-ms-win-core-timezone-l1-1-0.dll
- api-ms-win-shcore-scaling-l1-1-1.dll
Questions
Where can I download api-ms-win-crt-runtime-l1-1-0.dll?
Nowhere, and that is the answer rather than an evasion. It is an API set name, not a normal library, so Windows resolves it through an internal table instead of loading a file you place in System32. Install the Universal C Runtime through Windows Update, or the Visual C++ redistributable, and the name resolves again.
What is an API set?
A virtual DLL name that the Windows loader redirects to whichever real library implements those functions in your build of Windows. Microsoft introduced them so the implementation could move between releases without breaking programs. The name is a contract, not a file on disk.
Why do I get this error after installing a program?
Almost always because the program was built against a newer Universal C Runtime than the machine has. That runtime arrives through Windows Update and with the Visual C++ redistributable, so a Windows install that is behind on updates hits this repeatedly with different api-ms-win names.
Will copying the file from another PC work?
No, and it can make things worse. Even a genuine copy is not what the loader looks for, and a file from a different Windows build can shadow the real resolution and break programs that were working.
Why downloading individual DLL files does not work in general