Developing Windows Applications by Mykola Dudar

Helping Developers Build Applications for Windows using Visual Studio.

Resolving application dependency on Visual C++ libraries

Resolving application dependency on Visual C++ libraries

Rate This
  • Comments 5

When you use Visual C++ to build windows applications, a key step to guarantee that your application runs on another computer is to ensure that you deploy all dependencies of your application to that computer. At the minimum, your applications depends on Visual C++ libraries such as MFC, CRT, Standard C++ Library and other. The steps you need to take to resolve dependency on Visual C++ libraries depend on the version of Visual C++ you use. Below you may find links to official documentation for various versions of Visual Studio and blog posts with the guidance on resolving your application dependency on Visual C++ library.


Visual Studio 2005


New deployment model for ATL, MFC, and CRT libraries based on concepts of isolated applications  and side-by-side assemblies was introduced in Visual C++ 2005. Martyn Lovell in one of his posts provided a detailed explanation for why VC++ team had to change deployment model for VC++ DLLs, http://blogs.msdn.com/martynl/archive/2005/10/13/480880.aspx.

I have summarized steps required to run Visual C++ application on another computer when it is built using Visual C++ Express 2005 or Visual Studio 2005 in this post. There are several potential errors that Windows reports for applications incorrectly resolve dependencies on Visual C++ libraries such as:

  • The application failed to initialize properly (0xc0000135).
  • This application has failed to start because the application configuration is incorrect. Reinstalling application may fix this problem.
  • The system cannot execute the specified program.
  • R6034 An application has made an attempt to load the C runtime library incorrectly.
  • This application has failed to start because MSVCR80.dll was not found. Re-installing the application may fix this problem.

I have published several posts to provide guidance for resolving those:

The official documentation is available on MSDN and below are the direct links:

  1. Choosing How to Deploy Visual C++ libraries.
  2. Redistributing Visual C++ libraries within Windows Installer package.
  3. How to Deploy Visual C++ libraries in per user installation in application's local folder or using xcopy.
  4. Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies.

Keep in mind that installing Visual C++ Redistributable Package for VS2005 usually resolves all the issues in this area. It is also possible to silently install VCRedist as I describe in Silent installs of VCRedist.EXE shipped with VS2005.


Visual Studio 2005 SP1

 

The Service Pack release to Visual Studio 2005 introduce the new version of VC++ libraries and some new issues. I have published several posts that help to resolve the most common issues:

All troubleshooting suggestions apply and help to resolve most of the issues. Keep in mind that installing Visual C++ Redistributable Package for VS2005 SP1 usually resolves all the issues in this area.



Visual Studio 2008 and Visual Studio 2008 SP1

 

Visual Studio 2008 continued to use the same deployment model as Visual Studio 2005. The version number of the libraries has changed but all the topics I posted about for Visual Studio 2005. Note that at this point my focus shifted to enabling C++ developers to build clients to web services and web services in native code. See my posts under Web Services. However the official documentation has been updated and you should be able to find answers in these topics:

  1. Choosing How to Deploy Visual C++ libraries.
  2. Redistributing Visual C++ libraries within Windows Installer package.
  3. How to Deploy Visual C++ libraries in per user installation in application's local folder or using xcopy.
  4. Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies.

And same as with Visual Studio 2005, installing Visual C++ Redistributable Package for VS2008 or Visual C++ Redistributable Package for VS2008 SP1 usually resolves all the issues in this area.


Visual Studio 2010

 

For this release, Visual C++ team has stopped using side-by-side deployment model for Visual C++ libraries. All libraries became again a simple DLL and resolving dependencies on them follows the old rules that apply to resolving dependencies on them. The difference between VS2010 and VS2008 are summarized in this article. They have updated the official documentation with the new guidance, which you may find here:

For this release, Visual C++ team has started to openly recommend developers use the Visual C++ Redistributable Package to install all Visual C++ libraries as shared DLLs in %windir%\system32. Visual Studio installs this package in the %WindowsSdkDir%\Bootstrapper\Packages folder. There is now an example of how to use VCRedist under Walkthrough: Deploying a Visual C++ Application By Using the Visual C++ Redistributable Package. Downloading and installing Visual C++ Redistributable Package for VS2010 allows you to correctly deploy Visual C++ Libraries on another computer.

 

Last Note

 

I hope this post helps you to understand and resolve your application dependency on Visual C++ Library. At the same time, I have to let you know that this area has not been the area of my focus for quite a while. There are many great articles on MSDN that cover this area well by now. Lately my focus is on overall guidance to developers on developing windows applications and best practices for program management and project management to help them achieve success in software development.

You may find all my posts on Visual C++ library deployment here. If you need more help, please ask questions at Visual C++ forum.

  • PingBack from http://blogates.com/twinsant/2006/06/20/yesterday-readings-158/
  • I had this problem with my Microsoft Visual Studio 2005.

    I upgraded to SP1 and then it worked...

  • hi all this is very good sloution for error

    it very nice ans...for sloution

  • Hi,

    I am using the VS2005 professional edition and I have created a dll in release mode(All dependent static libs also built in release mode).

    And while using this dll in the DependencyWalker and it shows me it is required MSVCP80D.dll, that why this dll is NOT working in my application.

    My question is here follows:

    1) Why MSVCP80D.dll is required in the release mode application?

    2) What project settings changes can I do to NOT required this debug version dll in my run time aplication?

    In the Dependency walker it shows me release Version of  MSVCP80.dll & MSVCR80.dll and Debug version of MSVCP80D.dll required..

    I am NOT able to understand why this dll is required in my application? And I have migrated the 2003.NET sln file into VS2005. For this time only I am getting the aove problem....

    Please advice me....

    Regards,

    Rammohan Alampally

    rammohan.alampally@hp.com

  • I had to down load NET.Framework 2,0, and NET framework 3.5 to reinstall Imort MSVCR80.dll.

Page 1 of 1 (5 items)