![microsoft vc80 debugcrt microsoft vc80 debugcrt](http://www.codeproject.com/KB/winsdk/SplitterWindowProject/image005.gif)
The manually created manifest to be used must still be included into your executable. It has been changed to use the requested assemblies private and application local. So, if we remove the publicKeyToken entries from the manifest, the program will no longer use the public installed files. The publicKeyToken attributes tell the loader in a Windows XP/2003/Vista system to look into the SxS storage for the needed DLLs. When you create a standard program with VC++ 8.0 using the shared DLLs of the MFC and the CRT, the following manifest gets created:
#MICROSOFT VC80 DEBUGCRT CODE#
So, I asked myself if there was a way to reuse the current code and to change its behavior such that manifests are automatically created which support private application local assemblies. I like code that controls the project as much as possible. Again, I don't like much intelligence in the project settings. Also, you have to modify the standard way in which C++ projects are created. There are too many mistakes you can make. To use private assemblies of the runtime files, it is necessary to extract the runtime files and modify the created manifest manually. No bootstrapping or MSI installer is needed in this case. Using private assemblies for runtime files allows easy xcopy deployment. The way to use the MFC and CRT as private assemblies is well-known and you might find some postings, forums, articles or blogs that address this. However, in a lot of cases it is not possible to use the static linked versions of the libraries, such as when using MFC extension DLLs. See the article about vcredist_x86.exe for more details.Ī lot of developers therefore decided to link statically to the MFC and CRT to avoid this.
#MICROSOFT VC80 DEBUGCRT INSTALL#
You have to install the runtime library files on the machine with the appropriate MSI merge module or installer. So, if the runtime files are not installed in the SxS storage the program can't run, even if the needed files are in the current application folder. This manifest tells the loader to pull the files from the Side by Side (SxS) storage of the current Windows system. The reason is that VC++ 8.0 binds the CRT and MFC - and ATL, if used - with a manifest to the EXE. This will work on Windows 2000, but not on Windows XP and Windows Vista. Programs that use the CRT and MFC with the shared DLL versions can't easily copy the runtime DLLs into the local application folder and run the application.
![microsoft vc80 debugcrt microsoft vc80 debugcrt](http://lh6.ggpht.com/_2ZMoTkLFVu8/SfMozB7qW-I/AAAAAAAAAiM/7D9gZQIvAi0/image_thumb[4].png)
This stopped suddenly with VC++ 8.0 (VS 2005). Just copying the runtime DLLs into the target directory with the executable would allow it to run. Up until VC++ 7.1 (VS.NET 2003), it was easy to deploy programs that use either the CRT-DLLs or the MFC shared DLLs.
![microsoft vc80 debugcrt microsoft vc80 debugcrt](https://i.stack.imgur.com/fCNEt.png)