An EXE file is no longer a "stand-alone" entity - it uses a lot of DLL files to provide "background stuff" so that a simple application can have a small file size. In the old days, an EXE file was created by linking together all the compiled code you wrote with all the libraries it used to form a self-contained file you could just copy to another computer. But as those libraries got more complex, they also got bigger and bigger, to the point where a modern .NET application could weight in at 400MB or more just to say "Hello world!" That's silly, and very wasteful because 99% of the code in the file was the same as your next app which said "Hello again world!" - so DLL files (and latter Assemblies) were developed so that common code could be installed a single time on a computer and all the apps that needed it could reference that instead of needing it to be part of the EXE - now, one installation needs to install 400MB, but all the others "know it's there" and just add the 4K EXE file!
But ... it the DLL and assemblies needed aren't there, the little EXE file can't run - so you can't just copy a file to a different computer and assume it will work - you have to install it "properly" before it can work - and that adds the support files like UCRTBASE.DLL for you if they aren't there already.
Have a look here: Walkthrough: Deploying Your Program (C++) | Microsoft Docs
] - it'll guide you through the process!