正确分发VC++运行时文件的方法

Hop*_*pyx 7 c++ deployment assemblies runtime crt

我有一个MFC应用程序,我试图打包部署.它似乎取决于文件'msvcr90.dll','msvcp90.dll'和'mfc90.dll'.分发这些文件的正确方法是什么?

我无法使用合并模块,因为我的安装程序不支持它们.我知道我可以运行VCRedist_x86.exe,但出于各种原因我不想这样做.

据我所知,我唯一的选择是将文件安装为Private Side-by-Side程序集.它是否正确?

根据http://msdn.microsoft.com/en-us/library/ms235317(VS.80).aspx安装私有程序集的正确方法是复制'Microsoft.VC90.CRT'和'Microsoft.VC90 .MFC'文件夹与可执行文件位于同一文件夹中.这是解决问题的正确方法吗?它有效,但以这种方式复制系统文件似乎有点像.任何人都可以向我展示另一个应用程序(或至少是一个演示项目)的例子吗?

最后,我什么时候需要担心为我的应用程序分发.manifest文件?我应该显式安装XML文件,还是以某种方式嵌入我的可执行文件中?

Sim*_*der 1

通常我会说您应该在目标计算机上安装所需的可再发行组件,因为它是“干净的方式”。但你也可以采用 90 年代的风格。这很大程度上取决于您使用哪个 CRT/MFC 库来构建应用程序。这可以在清单文件中进行检查。您还可以强制应用程序与指定的库绑定。没有任何定义 VS2008 通常绑定 9.0.21022.8,

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
Run Code Online (Sandbox Code Playgroud)

获取最新的库。您还可以绑定指定版本:

#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"
Run Code Online (Sandbox Code Playgroud)

和/或

#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"
Run Code Online (Sandbox Code Playgroud)

因此,如果您想按照 90 年代的风格进行操作,请C:\Windows\Winsxs\从您绑定的文件夹中复制文件并获取 DLL,例如,amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d4如果您将 CRT 用于 x64 应用程序,或者将x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1dCRT 用于 x86 版本的 CRT,则从该文件夹中获取 DLL。