2016-06-10 84 views
0

我读过的文章解释说,使用C++可再发行的程序将安装多个版本,具体取决于他们需要什么。但是我读过的文章都没有解释为什么有不同的版本是如此重要。为什么程序不能使用最新版本的内容?为什么程序不能简单地使用最新版本的C++ Redistributable?

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

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

+2

从前,事情按照你描述的方式工作。 [本文](https://blogs.msdn.microsoft.com/oldnewthing/20140411-00/?p=1273)提供了一些关于为什么会发生更改的颜色。现在[旧的方式回来](https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/) –

+0

为什么我们不能只使用当前的福特所有福特汽车上的汽车零件?我看到的唯一问题是,多年来不断变大,技术或功能发生变化,但福特总是福特,对吧?它应该不是什么福特它是什么年;很明显,符合福特今天制造的零件应该也可以用于10年前或20年前制造的福特车型。其实,为什么我的2016 Escape中的GPS系统不能在我邻居车库里的1957年Fairlane上工作?全部都是一样。 –

回答

0

VS CRT通常是版本特定的。 VS 2013 Update 5版本的CRT将使用任何版本的VS 2013构建的程序,但它不适用于VS 2012或VS 2015.这是因为语言和标准库使用CRT的元素,随着编译器的变化,CRT也会发生变化。

这就是说,服务的处理方式随着时间而改变。回到VS 2005/VS 2008,采用了一种名为“融合”的并排技术,试图使其无缝连接,但事实证明,这种技术的效果并不理想,而且效果不佳。自VS 2010以来,不再使用“Fusion”,并且程序需要(a)在REDIST EXE/MSM中运行,以将所需的CRT部署到%WINDIR%或(b)将DLLs应用程序放到本地程序的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

注意,对于通用的window平台的应用程序,Windows应用商店需要为您部署CRT的照顾。

0

由于DLL地狱问题,并排侧组件(包括原生的DLL,而不仅仅是管理组件)进行了介绍。这解决了DLL地狱问题 - 即各种安装程序覆盖其他程序使用的DLL。使用SxS时,必须有多个版本的同一个DLL,这样才不会中断程序。你不能同时拥有(相同的DLL,但SxS程序集)。

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

相关问题