为什么不让程序只使用最新版本的C ++ Redistributable?

时间:2016-06-10 19:30:34

标签: visual-c++ redistributable

我读过文章,解释使用C ++可再发行组件的程序将根据需要安装多个版本。但我读过的文章都没有解释为什么它有如此重要的不同版本。为什么程序只能使用最新版本的内容?

我看到的唯一问题是是否有人弃用了。但在这种情况下,我认为应该有一些处理程序仍然可以吐出所需的结果。除此之外,唯一的问题是旧的应用程序不会遵循这个规则"规则"使用最新版本。

那么,为什么程序只使用最新版本呢?

2 个答案:

答案 0 :(得分:0)

通常,VS CRT是特定于版本的。 VS 2013 Update 5版本的CRT将与任何版本的VS 2013构建的程序一起使用,但它不适用于VS 2012或VS 2015.这是因为语言和标准库使用了CRT,随着编译器的改变,CRT也是如此。

那就是说,服务的确切处理方式随着时间的推移而发生了变化。回到VS 2005 / VS 2008,这是一种称为" Fusion"的并排技术。被雇用来试图使其无缝,但它被证明是quirky并且规模很小。自VS 2010以来," Fusion"不再使用和程序预期(a)在REDIST EXE / MSM中运行以将所需的CRT部署到%WINDIR%或(b)将DLL应用程序放在您的程序的EXE本地。第一个由Windows Update提供服务,第二个没有。

请参阅 How to redistribute the Visual C++ Libraries with your applicationC-Runtime Deployment: Why choose AppLocal?

对于VS 2015,CRT被重构为试图制作特定于编译器的" CRT的部分区别于特定平台"部分不同于标准功能"部分。请参阅The Great C Runtime (CRT) RefactoringIntroducing the Universal CRT

  

请注意,对于Universal Window Platform应用程序,Windows应用商店负责为您部署CRT。

答案 1 :(得分:0)

由于 DLL Hell 问题,引入了并排程序集(包括本机DLL,而不仅仅是托管程序集)。这解决了DLL地狱问题 - 即各种安装程序覆盖其他程序使用的DLL。使用SxS,必须有相同DLL的多个版本,因此任何程序都不会中断。您不能同时拥有这两个(相同的DLL,但SxS程序集)。

各种VC ++运行时只不过是在C:\Windows\WinSxS中放置了基于GUID的DLL的SxS程序集 - 您的程序绑定到特定版本,平台 - 它不会中断。