Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正确分配VC++;运行时文件_C++_Deployment_Assemblies_Runtime_Crt - Fatal编程技术网

C++ 正确分配VC++;运行时文件

C++ 正确分配VC++;运行时文件,c++,deployment,assemblies,runtime,crt,C++,Deployment,Assemblies,Runtime,Crt,我有一个MFC应用程序,我正在尝试打包以进行部署。它似乎取决于文件“msvcr90.dll”、“msvcp90.dll”和“mfc90.dll”。分发这些文件的正确方式是什么 我不能使用合并模块,因为我的安装程序不支持它们。 我知道我可以运行vcredit_x86.exe,但出于各种原因,我不想这样做 就我所知,我唯一的选择是将文件作为私有并排程序集安装。这是正确的吗 安装专用程序集的正确方法是将“Microsoft.VC90.CRT”和“Microsoft.VC90.MFC”文件夹复制到与可执

我有一个MFC应用程序,我正在尝试打包以进行部署。它似乎取决于文件“msvcr90.dll”、“msvcp90.dll”和“mfc90.dll”。分发这些文件的正确方式是什么

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

就我所知,我唯一的选择是将文件作为私有并排程序集安装。这是正确的吗

安装专用程序集的正确方法是将“Microsoft.VC90.CRT”和“Microsoft.VC90.MFC”文件夹复制到与可执行文件相同的文件夹中。这是解决问题的正确方法吗?这是可行的,但以这种方式复制系统文件似乎有点困难。有人能给我举一个其他应用程序(或者至少是一个演示项目)的例子吗


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

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

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
采用最新的LIB。您还可以使用指定的版本进行绑定:

#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"
和/或

#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"

因此,如果您想以90年代的风格进行操作,请从
C:\Windows\Winsxs\
复制文件,并从您绑定的文件夹中获取DLL,FC8B3B9A1E3E3B39B0.93072291IONEY99 B61F5E837 1C1D4 < /代码>如果您使用CRT作为X64应用程序或等效的代码< x86MyFask.VC90.CRTY1FC8B3B1E9E3E3B30.9307221.9NoEY99 B61F5E831C1D < /代码> X86版本的CRT .< /P> < P>您也可以考虑静态连接MFC和CRT,例如从<代码> AMD64微软公司VC90.CRTY1然后你只需要发送你的EXE文件。不过,这有其优点和缺点。

我认为这足以将这些DLL与您的exe放在一起,因为当前路径是首先查找它们的地方


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

FWIW我问了一个关于CRT DLL的装运的类似问题。欢迎来到DLL地狱,第三章*(前两章讨论了文件位置问题和版本问题。)没错,但使用可再发行文件是正确的。这是正确的答案。安装可再发行文件或在可执行文件旁边安装DLL。引用:“为了部署可再分布的Visual C++文件,可以使用VisualStudio中包含的VisualC++可重分配包或使用可重新分发的合并模块,或者可以在应用程序本地文件夹中直接安装可重新分发的Visual C++ DLL,该文件夹是包含可执行应用程序文件的文件夹。”