为什么新的Visual Studio运行时不是Windows的一部分?

8

我知道在我的项目中需要分发C/C++运行时库。但我想知道,为什么微软不帮我们完成这个呢?我知道在Windows中已经包含了Visual Studio 6.0运行时,但为什么没有新版本的呢?

如果有人可以提供一篇详细解释的文章链接,那就太好了。我已经试着用谷歌搜索了一段时间,但一直没有找到合适的结果。


VC++ 6运行时库只是附带的,因为他们包含了一些使用VC++6编译的程序需要它。今天开发的类似程序更可能依赖于(某个版本的).NET。 - Jerry Coffin
+1 是一个好的点;对用户来说似乎有些侵入性。更不用说对于一个非程序员试图安装你的程序而言,这是多么令人困惑:“这个 C++ 运行时垃圾到底是什么鬼?!” - Anthony
我认为,如果这是来自微软的操作系统,他们可以将这些DLL作为其操作系统的标准部分进行分发。如果您安装了这些DLL,则它们将通过Windows更新进行更新。 - jhruby
@jhruby:微软已经发布了一个“VC++运行时可分发组件”,您可以将其包含在您的安装程序中。我记得它既可作为.EXE文件,也可作为.MSI文件提供。 - MSalters
@jhruby:你是否在想为什么Windows 2000没有分发Visual C++2010运行时?我猜是因为缺乏时间机器。 - MSalters
显示剩余3条评论
1个回答

1
Windows中包含了一个C运行时库,名为msvcrt.dll。MinGW gcc变种使用该库作为其基本运行时库。微软也构建了链接到该运行时库的程序(例如,Windows安装中的程序)。
虽然Windows自带的msvcrt.dll与VC6的运行时DLL具有相同的名称,但它不一定是VC6的运行时。每个新版本的Windows都会向msvcrt.dll添加函数,并可能修复一些错误。
WDK曾经包括链接到msvcrt.dll的构建配置(最后一个支持此功能的WDK版本似乎是WDK 7.1)。这些构建配置还包括一些兼容性shim,例如msvcrt_win2003.obj,使使用此类配置构建的程序可以针对旧版本的Windows中包含的msvcrt.dll库运行-例如,添加对新的异常处理和一些新的API的支持。
我怀疑MS更喜欢第三方程序链接到不属于Windows系统文件的运行时库的原因有很多。一些可能的原因:
  • 它有助于确保第三方程序不会因为包含更新版本的msvcrt.dll的Windows更新而被破坏。
  • 它有助于确保第三方程序将针对其经过测试的运行时DLL运行(因为假定第三方程序的安装程序还确保安装了相应的MSVC可再发行运行时)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接