49

I have installed the Visual Studio 2015 and created Win32 project with some code. I compiled it successfully, but I can't launch exe file, because I don't have some ucrtbased.dll...So how can I solve it?

enter image description here

Edit: The English equivalent message is: "The program can't start because ucrtbased.dll is missing from your computer. Try reinstalling the program to fix this problem. "

RJFalconer
  • 10,890
  • 5
  • 51
  • 66
kostyabakay
  • 1,649
  • 2
  • 21
  • 32

6 Answers6

74

This problem is from VS 2015 silently failing to copy ucrtbased.dll (debug) and ucrtbase.dll (release) into the appropriate system folders during the installation of Visual Studio. (Or you did not select "Common Tools for Visual C++ 2015" during installation.) This is why reinstalling may help. However, reinstalling is an extreme measure... this can be fixed without a complete reinstall.

First, if you don't really care about the underlying problem and just want to get this one project working quickly, then here is a fast solution: just copy ucrtbased.dll from C:\Program Files (x86)\Windows Kits\10\bin\x86\ucrt\ucrtbased.dll (for 32bit debug) into your application's \debug directory alongside the executable. Then it WILL be found and the error will go away. But, this will only work for this one project.

A more permanent solution is to get ucrtbased.dll and ucrtbase.dll into the correct system folders. Now we could start copying these files into \Windows\System32 and \SysWOW64, and it might fix the problem. However, this isn't the best solution. There was a reason this failed in the first place, and forcing the use of specific .dll's this way could cause major problems.

The best solution is to open up the control panel --> Programs and Features --> Microsoft Visual Studio 2015 --> Modify. Then uncheck "Visual C++ --> Common Tools for Visual C++ 2015". Click Next, then and click Update, and after a few minutes, Common Tools should be uninstalled. Then repeat, but this time install the Common Tools. Make sure anti-virus is disabled, no other tasks are open, etc. and it should work. This is the best way to ensure that these files are copied exactly where they should be.


Error Codes: Note that if the installer returns a cryptic error number such as -2147023293, you can convert this to hex using any of the free online decimal-to-hex converters. For this error it is 0xFFFFFFFF80070643 which, dropping the FF's and googling for "0x80070643", means `0x80070643 - Installation cache or ISO is corrupted'.


Why is ucrtbased.dll even needed?: Any DLL named "crt" is a "C-Run-Time" module or library. Microsoft explains them best. There are many variants of CRT today. They contain essential helper-code used by all Microsoft compiled executables, to "shim" or help your executable operate on the ever-growing number of OS versions and hardware. If the MSVC compiler is used, the relevant CRT DLL is linked automatically at compile-time. (If the DLL cannot be found at compile-time, then a linking error is generated.)

One way to not require the DLL, is to "statically-link" it to your project. This means that you essentially take the contents of ucrtbased.dll, and include it in your executable. Your file size will grow by approximately the size of ucrtbased.dll.

Incidentally, if you've ever run a MSVC program (usually from another individual, one of your old compiled programs from a previous OS version, or yours from a different machine) and it does not start, giving an error message of needing "Microsoft Visual C++ 20xx Redistributable" or "run-time" - then it means it can't find the needed *crt*.dll file. Installing that particular redistributable package (if known) will install the DLL, and allow the program to run... or at least get past that error and alert you of another missing DLL.

If you find yourself in this "DLL Hell" predicament, google "dependency walker" for an advanced tool to show which DLLs are still missing. This usually doesn't happen with professional software, simply because their (large, bundled) installers check for any missing dependent libraries (including CRT) and installs them first.

rdtsc
  • 1,044
  • 10
  • 17
  • 1
    I'm using Visual Studio Build Tools and the 'Repair' function did not work to fix this, however a complete uninstall and reinstall did. – Timmmm Feb 03 '17 at 16:31
  • 3
    The key was to install Common Tools for Visual C++ 2015 in VS setup/modify – ankit9j Mar 03 '17 at 15:41
  • thanks, its works for 64 bit OS,path is C:\Program Files (x86)\Windows Kits\10\bin\x64\ucrt for – Milind Morey Feb 05 '19 at 06:01
  • why does my app need this .dll in the first place? Is it easy to compile the app so it doesn't need that dll? – gman Jul 15 '21 at 03:17
7

The problem was solved by reinstalling Visual Studio 2015.

kostyabakay
  • 1,649
  • 2
  • 21
  • 32
  • 3
    Make sure you have installed "Microsoft Foundation Classes for C++" which you can check by going to New Project->Installed->Visual C++->MFC. Once you installed you need not reinstall the VS2015 since it might consume lot of your time. – Jnana Oct 04 '16 at 06:49
  • 1
    Or just reinstalling the Visual C++ components. – David Norman Feb 06 '17 at 21:45
7

rdtsc solution did not work for me.

Firstly, I use Visual Studio 2015 Express, for which installer "modify" query does not propose any "Common Tools for Visual C++ 2015" option you could uncheck.

Secondly, even after 2 uninstall/reinstall (many hours waiting for them to complete...), the problem still remains.

I finally fixed the issue by reinstalling the whole Windows SDK from a standalone installer (independently from Visual C++ 2015 install): https://developer.microsoft.com/fr-fr/windows/downloads/windows-8-1-sdk or https://developer.microsoft.com/fr-fr/windows/downloads/windows-10-sdk

This fixed the issue for me.

jpo38
  • 20,821
  • 10
  • 70
  • 151
6

An easy way to fix this issue is to do the following (click on images to zoom):

Make sure to close Visual Studio, then go to your Windows Start -> Control Panel -> Programs and Features. Now do this:

enter image description here

A Visual Studio window will open up. Here go on doing this:

Select the checkbox for Common Tools for Visual C++ 2015 and install the update.

enter image description here

The update may takes some time (~5-10 minutes). After Visual Studio was successfully updated, reopen your project and hit Ctrl + F5. Your project should now compile and run without any problems.

Kevin Katzke
  • 3,581
  • 3
  • 38
  • 47
1

I would like to suggest additional solution to fix this issue. So, I recommend to reinstall/install the latest Windows SDK. In my case it has helped me to fix the issue when using Qt with MSVC compiler to debug a program.

Cobra91151
  • 610
  • 4
  • 14
0

I am not sure it will help but you can try this.This worked for me

Start -> Visual Studio Installer -> Repair

after this enable the Microsoft Symbols Server under

TOOLS->Options->Debugging->Symbols

This will automatically set all the issues.

You can refer this link as well

https://social.msdn.microsoft.com/Forums/vstudio/en-US/6aa917e5-a51c-4399-9712-4b9c5d65fabf/ucrtbasedpdb-not-loaded-using-visual-studio?forum=visualstudiogeneral

Muskan Agarwal
  • 378
  • 5
  • 19