7

我有一个 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' 文件夹与可执行文件位于同一文件夹中。这是解决问题的正确方法吗?它可以工作,但以这种方式复制系统文件似乎有点 1990 年代。谁能给我看一个这样做的另一个应用程序(或至少一个演示项目)的例子?

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

4

3 回答 3

1

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

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

采用最新的库。您还可以绑定指定版本:

#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"

和/或

#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"

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

于 2010-02-03T13:43:40.703 回答
1

我会说这足以将这些 dll 与您的 exe 一起放置,因为当前路径是首先查找它们的位置。

当然,您应该努力安装可再发行组件,因为这是更安全的方法。

于 2010-02-03T16:16:36.227 回答
1

您还可以考虑与 MFC 和 CRT 进行静态链接,然后您只需要发送您的 EXE 文件。这虽然有利也有弊。

于 2010-02-03T14:25:58.583 回答