Search code examples
visual-c++dllwinsxs

Visual C++ Redistributables without using VCRedist_x86.exe


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?


Solution

  • We use this: Howto: Deploy VC2008 apps without installing vcredist_x86.exe

    Essentially

    • Don't embed a manifest in your exe files.
    • Copy the C++ DLLs and their manifests to your app's directory.
    • Remove the "publicKeyToken" from all manifests (yours and Microsoft's).
    • If necessary, change the version info in your app's manifest files to match the Microsoft manifest files (or vice versa)