2016-06-10 8 views
0

Я читал статьи, объясняющие, что программы, использующие C++ redistributable, будут устанавливать несколько версий в зависимости от того, что им нужно. Но ни одна из статей, которые я прочитал, не объясняла , почему так важно иметь разные версии. Почему программы не могут использовать контент только из новейшей версии?Почему программы не просто используют последнюю версию 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

Почему мы не можем просто использовать текущий Ford автозапчасти на всех автомобилях Ford? Единственная проблема, которую я вижу, заключается в том, что годы становятся все больше, а технологии или функциональные изменения меняются, но Ford всегда является Ford, верно? Не имеет значения, в каком году Форд это; ясно, что части, которые подходят Форду сегодня, должны также работать на Ford, который был выпущен 10 лет назад, или 20 лет назад. Вообще-то, почему бы не использовать ту GPS-систему, которая находится в моем «Игнорическом» 2016 году, на том, что 1957 года Фэрлэйн в гараже моего соседа? Все то же самое. –

ответ

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 application и C-Runtime Deployment: Why choose AppLocal?

Для VS 2015 ЭЛТ был переработан, чтобы попытаться сделать «компилятор конкретным» части ЭЛТ отличаются от «конкретных платформ» частей, отличных от «стандартной функциональности "частей. См The Great C Runtime (CRT) Refactoring и Introducing the Universal CRT

Обратите внимание, что для приложений Универсальные окна платформы, Windows Store заботится о развертывании CRT для вас.

0

Благодаря DLL ад проблемы, Бок о бок собрания были введены (в том числе собственные библиотеки DLL, а не только управляемые сборки). Это решает проблему аддона DLL - то есть различные установщики перезаписывают библиотеки DLL, используемые другими программами. С SxS должно быть несколько версий одной и той же DLL, чтобы никакая программа не сломалась. Вы не можете иметь обе (те же библиотеки DLL, но SxS).

Различные исполнения VC++ - это не что иное, как сборки SxS, имеющие DLL на основе GUID, размещенные в C:\Windows\WinSxS - ваша программа привязана к определенной версии, платформе - и она не сломается.