2016-06-10 9 views
0

J'ai lu des articles expliquant que les programmes qui utilisent C++ redistribuable installent plusieurs versions, selon ce dont ils ont besoin. Mais aucun des articles que j'ai lu n'a expliqué pourquoi il est si important d'avoir des versions différentes. Pourquoi les programmes ne peuvent-ils pas utiliser le contenu de la dernière version?Pourquoi les programmes n'utilisent-ils pas simplement la version la plus récente de C++ Redistributable?

Le seul problème que je vois est si quelque chose est obsolète. Mais dans ce cas, je pense qu'il devrait y avoir un gestionnaire qui peut encore cracher le résultat souhaité. Autre que cela, le seul problème serait que les anciennes applications ne suivraient pas cette "règle" d'utilisation des versions les plus récentes. Alors, pourquoi les programmes n'utiliseront-ils que la version la plus récente?

+2

Il était une fois, les choses fonctionnaient comme vous le décrivez. [Cet article] (https://blogs.msdn.microsoft.com/oldnewthing/20140411-00/?p=1273) fournit quelques couleurs pour expliquer pourquoi cela a changé. Et maintenant [l'ancienne voie revient] (https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/) –

+0

Pourquoi ne pouvons-nous pas simplement utiliser Ford actuel pièces de voiture sur toutes les voitures Ford? Le seul problème que je vois est que les années ne cessent de grossir et que la technologie ou la fonctionnalité change, mais une Ford est toujours une Ford, n'est-ce pas? Ça ne devrait pas compter en quelle année Ford est; clairement pièces qui correspondent à une Ford fait aujourd'hui devrait également travailler sur une Ford qui a été fabriqué il y a 10 ans, ou il y a 20 ans. En fait, pourquoi ce système GPS de mon Escape 2016 ne devrait-il pas fonctionner sur cette Fairlane de 1957 dans le garage de mon voisin? C'est tout pareil. –

Répondre

0

Généralement, le VS CRT est spécifique à la version. VS 2013 Update 5 version de la CRT fonctionnera avec un programme construit par n'importe quelle version de VS 2013, mais cela ne fonctionne pas avec VS 2012 ou VS 2015. Cela est dû au fait que le langage et la bibliothèque standard utilisent des éléments du CRT, et comme le compilateur change, le CRT change aussi.

Cela dit, la façon exacte dont l'entretien est géré a changé avec le temps. De retour dans VS 2005/VS 2008, une technologie côte à côte connue sous le nom de "Fusion" a été employée pour essayer de la rendre transparente, mais elle s'est révélée être quirky et à l'échelle mal. Depuis VS 2010, "Fusion" n'est plus utilisé et les programmes devraient (a) s'exécuter dans l'EXE/MSM REDIST pour déployer le CRT nécessaire au %WINDIR% ou (b) mettre l'application DLL locale avec l'EXE de votre programme. Le premier est desservi par Windows Update, le second non.

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

Pour VS 2015, le CRT a été refactorisé pour essayer de faire les parties du tube cathodique distinct des parties « spécifiques à la plate-forme » « compilateur spécifique » distincte de la « fonctionnalité standard " les pièces. Voir The Great C Runtime (CRT) Refactoring et Introducing the Universal CRT

Notez que pour les applications plate-forme universelle fenêtre, le Windows Store prend en charge le déploiement du CRT pour vous.

0

En raison de l'enfer des DLL problèmes, côte à côte assemblées (y compris les DLL natives, non seulement des assemblages gérés) ont été introduites. Cela résout le problème d'enfer DLL - c'est-à-dire divers installateurs remplaçant les DLL utilisées par d'autres programmes. Avec SxS, il doit y avoir plusieurs versions de la même DLL, de sorte qu'aucun programme ne casse. Vous ne pouvez pas avoir les deux (mêmes DLL, mais assemblages SxS).

Divers runtimes VC++ ne sont rien d'autre que des assemblys SxS ayant des DLL basées sur GUID placées dans C:\Windows\WinSxS - votre programme est lié à une version particulière, plate-forme - et il ne cassera pas.