首页 » 分享 » 正文

微软 Universal C Runtime(通用C运行库) 的那些事情

什么是 “微软 Universal C Runtime(通用 C 运行库)”?

Windows 10 通用 CRT 是 CRT 功能在 Windows 操作系统上的 Windows 操作系统组件。此更新使的 Windows 桌面应用程序依赖于 Windows 10 通用 CRT 释放在早期版本的 Windows 操作系统上运行。

使用 Windows 10 软件开发工具包 (SDK)? 来构建应用程序时,Microsoft Visual Studio 2015 年上通用的 CRT 创建依赖项。早在 Windows 操作系统上使这些应用程序可以正常运行,您可以安装此更新。

微软的开发者指导官网上说 ?:“在非 Windows 10 平台上,Windows 10 SDK 要求安装通用 CRT: KB2999226。若要避免在设置期间发生错误,请确保在安装 Windows SDK 之前从 Microsoft 更新安装推荐的最新更新和修补程序。” 从这里我们可以看出,Windows 10 自带通用 C 运行库。

通用 C 运行库是使用 Windows 10 SDK 生成的程序的必要的运行库,微软使用了 2 个途径来向用户分发:1、Visual C++ Redistributable Package 2015?;2、Windows 更新程序KB3118401? 和KB2999226?。这 2 者的关系是这样的,Visual C++ Redistributable Package 2015 中包含有传统的 Visual C++ 14 的运行库、XP 专用的通用 C 运行库以及 KB2999226 和 KB3118401。而 KB3118401 是 KB299926 的升级版本,但 KB3118401 不支持 Windows 8 系统,如下图 1 和 2 所示情况,我们可以看到,KB3118401 不支持 Windows 8,而 KB299926 支持 Windows 8。

 

其中,KB299926 中,通用 C 运行库文件的版本为 10.0.10240.16390,这是 Windows 10 首次发布时的版本;在 KB3118401 中,通用 C 运行库文件的版本为 10.0.10586.9,这是 Windows 10 TH2 的版本。

我们将 Visual C++ Redistributable Package 2015-2019 解压后发现 XP 专用的通用 C 运行库文件,由名为 “vc_runtimeMinimum.msi” 的文件来安装,只用于 XP。其文件版本如下图 3 所示,为 10.0.10586.15。

Visual C++ Redistributable Package 2015-2019

而传统的 Visual C++ 14 运行库,由名为 “vc_runtimeAdditional.msi” 的文件来安装。其包含的文件如下图 4 所示,可以看出,和我们常见的 Windows 运行库文件命名很类似。

VC 2015-2019 运行库

最终我们得出这么几个结论:

1、通用 C 运行库是使用 Windows 10 SDK 生成的程序的必要的运行库.

2、微软使用了 2 种方式分发通用 C 运行库。

3、Windows 10 已经自带通用 C 运行库。

4、Visual C++ Redistributable Package 2015 中包含通过 Windows Update 分发的 2 个补丁。

5、这 2 个补丁不适合于 XP 系统,XP 系统由 Visual C++ Redistributable Package 2015 中的 vc_runtimeMinimum.msi 来分发(XP 已经没有补丁打了,不内置在运行库难道?)

6、Windows 8 系统永远只能获取 10.0.10240.16390 版本的通用 C 运行库(目前是这样,除非微软改变做法给其升级通用 C 运行库的版本)

7、这也是为什么你在网上搜索 “Visual C++ Redistributable Package 2015 failed?”,能得到 170 万条结果,因为这个运行库过于复杂:包含 Visual C++ 14 的运行库、XP 专用的通用 C 运行库以及 KB2999226 和 KB3118401。当一个安装包包含四个大组件时,你不能苛求他能异常稳定的安装成功。

8、如果禁用 Windows Update 服务,那么在 Win7 到 Win8.1 下安装 Visual C++ Redistributable Package 2015 运行库,那么你将注定失败(除非你已经打了 KB3118401 或 KB299926)

本文共 2 个回复

  • 185212084 2019/06/19 22:32

    很神奇的一件事情,作者的一键运行库把360给自动干掉了,是怎么回事。

    • roustar31 博主 2019/06/30 09:55

      @ 185212084 那个是 360调用的旧版本的 C 运行库,使用 inno setup 打包的程序当遇到这种需要更新的组件被占用使用的情况,会在安装过程中提醒是否自动关闭,关闭调用的是windows 的 Process API,我不相信使用这个 API 能关闭360。

发表评论