我有一个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文件,还是以某种方式嵌入我的可执行文件中?
答案 0 :(得分:1)
通常我会说你应该在目标机器上安装所需的可再发行组件,因为它是“干净的方式”。但你也可以做90年代的风格。它很大程度上取决于您使用哪个CRT / MFC库来构建应用程序。这可以在清单文件中检查。您还可以强制应用程序与指定的lib绑定。没有任何定义VS2008通常用
绑定9.0.21022.8#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
最新的libs被采用。您还可以使用指定的版本进行绑定:
#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"
和/或
#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"
因此,如果您想要使用90年代样式,请复制C:\Windows\Winsxs\
中的文件并从绑定的文件夹中获取DLL,例如如果您将CRT用于x64应用程序,则使用amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d4
;对于x86版本的CRT,使用等效x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d
。
答案 1 :(得分:1)
您还可以考虑静态链接MFC和CRT,然后您只需要发送您的EXE文件。但是这有利有弊。
答案 2 :(得分:1)
我想说这足以将这些dll与你的exe一起放,因为当前路径是他们首先寻找的地方。
当然,您应该努力安装可再发行组件,因为这是更安全的方式。