Visual C++ Redistributables without using VCRedist_x86.exe

dllvisual c++winsxs

I'm developing in an environment that is severely constrained, but the developers also have tight control over.

VCRedist_x86.exe – A 4Mb redistributable – is no fun (four hours to transfer). I'd really prefer to just redistribute MFC90.dll, msvcm90.dll, msvcp90.dll and msvcr90.dll – that's more like 2Mb. However, Redistributing Visual C++ Files says:

It is not supported to redistribute C/C++ applications that are built without a manifest. Visual C++ libraries cannot be used by C/C++ applications without a manifest binding the application to these libraries. For more information, see Choosing a Deployment Method.

My original plan of copying the DLLs into the program's working directory doesn't seem to
work in this brave new world of manifests.

My next guess is to bodge up the registry entries required to populate the files into the WinSxS directory and populate it myself (rather than using the 4 meg program).

[edit] The software is frequently updated, so DLLs are strongly preferred to static linking. [/edit]

How can I sucessfully distribute the necessary files but keep the overhead down?

Best Answer

[I'm the current SxS maintainer at Microsoft]

I would strongly suggest against removing the publicKeyToken attribute from manifests. Private deployment of the dlls will work just fine with this attribute left intact. However, removing it will prevent your app from benefiting from security updates should there be a newer version of the CRT installed centrally on the target machine, as the dependencies will no longer match up.

So, to summarize: it's safe to embed your manifest, with the default. Copy the CRT manifest + DLL files directly into your executable's directory, with no edits. That's it. Compatible Win2k+.