2016-06-10 13 views
0

Ich habe Artikel gelesen, die erklären, dass Programme, die C++ redistributable verwenden, mehrere Versionen installieren, je nachdem, was sie benötigen. Aber keiner der Artikel, die ich gelesen habe, hat erklärt warum es ist so wichtig, verschiedene Versionen zu haben. Warum können Programme nicht einfach den Inhalt der neuesten Version verwenden?Warum verwenden Programme nicht einfach die neueste Version von C++ Redistributable?

Das einzige Problem, das ich sehe, ist, wenn etwas veraltet wird. Aber in diesem Fall denke ich, dass es einen Handler geben sollte, der immer noch das gewünschte Ergebnis ausspucken kann. Abgesehen davon würde das einzige Problem sein, dass alte Anwendungen dieser "Regel" der Verwendung der neuesten Versionen nicht folgen würden.

Also, warum verwenden Programme nicht einfach die neueste Version?

+2

Es war einmal, die Dinge funktionierten so, wie Sie es beschreiben. [Dieser Artikel] (https://blogs.msdn.microsoft.com/oldnewthing/20140411-00/?p=1273) bietet eine Farbe, warum dies geändert wurde. Und jetzt [der alte Weg kommt zurück] (https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/) –

+0

Warum können wir nicht einfach den aktuellen Ford benutzen? Autoteile an allen Ford-Autos? Das einzige Problem, das ich sehe, ist, dass die Jahre immer größer werden und sich Technologie oder Funktionalität ändern, aber ein Ford ist immer ein Ford, oder? Es sollte egal sein, welches Jahr Ford es ist; Teile, die zu einem heute gebauten Ford passen, sollten auch an einem Ford funktionieren, der vor 10 Jahren oder vor 20 Jahren hergestellt wurde. Warum sollte das GPS-System, das in meinem 2016 Escape funktioniert, nicht auf der Fairlane von 1957 in der Garage meines Nachbarn arbeiten? Es ist alles das Gleiche. –

Antwort

0

Im Allgemeinen ist der VS CRT versionsspezifisch. VS 2013 Update 5-Version des CRT wird mit einem Programm arbeiten, das von jeder Version von VS 2013 erstellt wurde, funktioniert aber nicht mit VS 2012 oder VS 2015. Dies liegt daran, dass die Sprache und die Standardbibliothek Elemente des CRT verwenden. und wenn sich der Compiler ändert, ändert sich auch die CRT.

Das gesagt, genau wie die Wartung gehandhabt wird, hat sich im Laufe der Zeit geändert. Zurück in VS 2005/VS 2008 wurde eine Side-by-Side-Technologie namens "Fusion" verwendet, um zu versuchen, es nahtlos zu machen, aber es erwies sich als quirky und schlecht zu skalieren. Seit VS 2010 wird "Fusion" nicht mehr verwendet und es wird erwartet, dass Programme entweder (a) in der REDIST EXE/MSM ausgeführt werden, um die erforderliche CRT an die %WINDIR% bereitzustellen, oder (b) die DLLs-Anwendung lokal mit der EXE Ihres Programms platzieren. Der erste wird von Windows Update gewartet, der zweite nicht.

Siehe How to redistribute the Visual C++ Libraries with your application und C-Runtime Deployment: Why choose AppLocal?

Für VS 2015 die CRT Refactoring wurde, um zu versuchen die „Compiler-spezifischen“ Teile der CRT von den „plattformspezifische“ Teile verschieden zu machen unterscheidet sich von der „Standardfunktionalität " Teile. Siehe The Great C Runtime (CRT) Refactoring und Introducing the Universal CRT

Beachten Sie, dass für Universal Fenster Platform-Anwendungen, die Windows Store Pflege für Sie die CRT der Bereitstellung erfolgt.

0

Aufgrund DLL-Hölle Probleme, Side-by-Side Baugruppen (native DLLs einschließlich, nicht nur verwalteten Assembly) eingeführt wurden. Dies behebt das DLL-Hölle-Problem - d. H. Verschiedene Installationsprogramme überschreiben DLLs, die von anderen Programmen verwendet werden. Bei SxS müssen mehrere Versionen derselben DLL vorhanden sein, damit kein Programm unterbrochen wird. Sie können nicht beide haben (dieselbe DLL, aber SxS-Assemblys).

Verschiedene VC++ Laufzeiten sind nichts anderes als SxS-Baugruppen mit GUID-basierten DLLs in C:\Windows\WinSxS platziert - Ihr Programm ist an bestimmte Version, Plattform gebunden - und es wird nicht brechen.