Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I bundle the Visual Studio 2015 C++ Redistributable DLL's with my application?

I've built a C++ application using Microsoft Visual Studio 2015 Community Edition. I'm using Advanced Installer to make sure that the Visual C++ Redistributable for Visual Studio 2015 is a prerequisite.

However, the redistributable's installer isn't perfect. Some of my users have reported that the redistributable installer hangs, or it fails to install when it says it does, and then users get the "This program can't start because MSVCP140.dll is missing from your computer" error.

According to Microsoft, I can now package the redistributable DLLs along with my application, though they don't recommend it:

To deploy redistributable Visual C++ files, you can use the Visual C++ Redistributable Packages (VCRedist_x86.exe, VCRedist_x64.exe, or VCRedist_arm.exe) that are included in Visual Studio. ... It's also possible to directly install redistributable Visual C++ DLLs in the application local folder, which is the folder that contains your executable application file. For servicing reasons, we do not recommend that you use this installation location.

There are 4 files in C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT. Does that mean I just need to copy them to my application's directory during the install process?

  • MyApp.exe
  • concrt140.dll
  • msvcp140.dll
  • vccorlib140.dll
  • vcruntime140.dll

Is this OK to do? Do I need to show a license? Why aren't more people doing this instead of requiring yet another preinstall of the redistributable?

like image 603
a paid nerd Avatar asked Jan 30 '16 02:01

a paid nerd


People also ask

Do I need multiple copies of Microsoft Visual C++ redistributable?

Yes you need all, if you remove any some programs will not function properly.

Does Microsoft Visual C++ redistributable need all versions?

There are multiple different versions of Visual C++ Redistributable. Unfortunately, newer ones don't supersede older ones. For example, the Visual C++ 2015 Redistributable doesn't automatically replace the Visual C++ 2010 Redistributable. Both may be needed.

What is the use of Visual C++ redistributable for Visual Studio 2015?

The Visual C++ Redistributable Packages install run-time components of Visual C++ libraries. These components are required to run C++ applications that are developed using Visual Studio 2015 and link dynamically to Visual C++ libraries.


2 Answers

There are 4 files in C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT. Does that mean I just need to copy them to my application's directory during the install process?

Yes, and the paragraph you quoted means just that.

Is this OK to do? Do I need to show a license? Why aren't more people doing this instead of requiring yet another preinstall of the redistributable?

Technically, that's OK to do. If you want to be pedantic about it, you may include a note in the readme or help/about to the effect that VC++ 2015 redistributables provided in "local deployment" mode as explicitly allowed by Microsoft's Deployment in Visual C++ (with more links to the file lists and licenses at Redistributing Visual C++ Files).

As to why more people don't do it, I'd guess that (among those who care at all):

  • for a single module app like MyApp.exe it's easier to build it with everything linked statically as to eliminate external dependencies to begin with;
  • not including those files saves 1+ MB from the distribution (presumably download) size;
  • running with private copies of the runtime ("local deployment") shifts the responsibility of updates to the maintainer, so that in case of a critical/security fix the package would have to be reissued timely - as opposed to "central deployment" where it would likely be delivered via Windows Update, with both the good and bad that may bring.
like image 96
dxiv Avatar answered Oct 02 '22 12:10

dxiv


If you have problems with the prerequisites installer you also have the option to install the redistributables as merge modules. As the same MSDN article mentions:

Another option is to use redistributable merge modules (.msm files), which can be found in Program Files [(x86)]\Common Files\Merge Modules.

Using merge modules it is a much cleaner option than manually adding the files. The files can be deleted accidentally by another colleague which does not know why they are there, or one of them might not get installed, etc...

All editions of Advanced Installer have support to include merge modules, including the free edition.

  • how to add a merge module into an Advanced Installer project/package
like image 22
Bogdan Mitrache Avatar answered Oct 02 '22 12:10

Bogdan Mitrache