我是否应该重新分配MSVCRT.DLL我的申请?我是否应该重新分配MSVCRT.DLL我的申请?(S

2019-05-14 11:30发布

我应该用我的应用程序MSVCRT.DLL重新分配和使用私人DLL如果某些应用程序库的动态取决于MSVCRT.DLL? 即任何不兼容问题可能与系统的MSVCRT.DLL(DLL地狱)? 应用程序是针对Windows Server系统的。

Answer 1:

MSVCRT - 是微软的Visual C ++运行时动态库。

有在Windows中使用C运行时两个选项:

  1. 静态运行时库链接。
    请使用/MT/MTd选项CL.EXE。 在这种情况下,你将不得不对MSVCRT DLL没有依赖性,因此,你将不必重新分配。 在Visual Studio中,右键单击该项目或解决方案,属性> C / C ++ - >代码发生- >运行库使用多线程多线程调试分别。 这是更简单的方法。 的缺点是,生成的可执行文件较大。

  2. 与动态C运行时库链接。
    您将可使用该/MD/MDd选项CL.EXE。
    在Visual Studio中,右键单击该项目或解决方案,属性> C / C ++ - >代码发生- >运行库使用多线程动态链接多线程动态链接调试分别。 这导致较小的EXE,但不足之处是,在安装应用程序时,您必须安装所需的MSVCRT。


在VC ++编译器的船舶中的每一个释放与一个版本的C运行时(CRT)的。 Visual Studio 2005中附带的编译器的V8和CRT的V8。 对于V8中的实际DLL是msvcrt80.dll。 对于VS2008,这是V9,以及动态CRT是msvcrt90.dll。 但是,在CRT被更新,并且更频繁地比是C / C ++编译器修补。 开发者可以下载更新的CRT,并建立针对。

如果使用动态CRT库编译,你必须下载一个可再发行组件包运行时从microsoft.com必要的版本并执行(潜在沉默)你的应用程序安装过程中进行安装。


此前VS2005,开发的应用取决于那是在Windows操作系统中的MSVCRT。 而不是招致的应用程序安装出货CRT DLL的要求,这将使该DLL的利益(图像尺寸较小)。 此前Windoes 2000,开发人员甚至会在\ Windows安装文件夹中安装新的MSVCRT.dll的。 但是,在许多应用程序和操作系统也共享CRT,竟然是一个非常糟糕的主意。 随着WinXP SP2上的CRT包含在Windows显著变化,这取决于该版本的CRT的任何应用程序都在破裂的风险。

在这一点上微软告诉开发商所包含的Windows MSVCRT.dll的是操作系统的一部分,可维修或随时修补。 它不支持建立针对它的应用程序。 因此,应用程序应该使用上述方法之一。

参考文献:

  • MSDN上的VC ++参考文档 。
  • 下载MSVCRT90 v9.0.21022的REDIST(86 VS2008)
  • 下载MSVCRT90 v9.0.30729.4148的REDIST(86 VS2008 SP1)


Answer 2:

必须运输的msvcrt与应用程序。 它不是操作系统的一部分保证。 如果Windows的特定版本恰巧有它,那只是因为一些在Windows中使用它。

应用程序必须打破了,当新版本的Windows没有发生含有人承担的二进制文件的Windows附带。 应用程序必须打破了,当用户选择不安装WinFax的,这意味着MSVCRT不随它一起安装。

从雷蒙德陈 :

根据您正在运行的Windows版本,有可能是事情是不是正规的产品组件,但它仅仅是来凑热闹的各种支持的DLL。

...

这个问题今天依然存在。 人到处Windows附带找东西,他们可以二进制scrounging 雷莫拉 。 然后,他们很惊讶这些二进制文件更改或完全消失。

从KB326922 -在Visual C ++的共享的C运行时组件的再分配 :

...的CRT DLL不再被认为是一个系统文件,因此,与依赖于它的任何应用程序分发CRT DLL。 因为它不再是一个系统组件,与其他应用程序特定代码的应用程序文件目录中安装它。 这可以防止您的应用程序使用的是可在系统路径安装CRT库的其他版本。

必须运输的msvcrt与您的应用程序, 如果链接到MSVCRT。

更多

在作出决定干脆放弃,并宣布其操作系统的DLL,只能由操作系统组件使用。

虽然MSVCRT.DLL已经很长一段时间的操作系统DLL, 并已被记录为禁地应用程序 ,还是有很多人谁把它当作C运行时交付渠道 ,而这些程序创建了很多悲痛的产品团队。

必须重新分配与应用程序在Microsoft Visual C运行时,因为Windows不与任何Microsoft Visual C运行时出货。 有可能发生的是一个叫做DLL msvcrt.dll (这是不保证的),它不是 MSVCRT。



Answer 3:

因为无论是对克里斯的回答不应该被否决。

这件事是有是两套不同MSVCRTs的。 一套是msvcrt80.dll,msvcrt90.dll等附带的Visual Studio。 这通常是用什么人。 他们必须重新分配,在其他的答案交谈。

另一种是MSVCRT.DLL(与文件名没有数字)在System32文件夹中,其目的是仅由操作系统本身,因为前一段时间使用。 和应用程序不应该替换/重新安装。 然而,有些应用程序链接到它,因为某些原因想删除多余的依赖关系进行安装。 但请注意,它不能保证在未来的Windows版本。



Answer 4:

MSVCRT.DLL已经成为OS分布的事实上的一部分。 在Windows 98和95,并可能NT4很可能拿到的操作系统没有安装,如果人去关心条状写字板应用程序进行安装。

鉴于但其ubiquty,而事实上,因为这些操作系统很少有应用程序开发人员都不屑于出货,因为Windows 2000中其一直是OS的正式组成部分至少。

微软支持有工具 ,你可以用仔细检查什么产品的DLL附带。

执行像搜索这样 ,你可以看到,MSVCRT.DLL vsrsion 7.0.3790.0是在Windows Server 2003版本的一部分。



文章来源: Should I redistribute msvcrt.dll with my application?