Цитата Demetriadis:
Исполняемый файл (exe файл) игры в общем случае не обладает такой логикой и не читает манифесты
|
Это логика функций операционной системы.
Возьмем для примера какую-нибудь старую программу, типа 3DMark 2006.
В ее файлах Exporter.dll и SI3.dll есть манифесты с зависимостями:
Код:

<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
Версия VC 2005
8.0.50608.0 не установлена в системе. Значит, по-вашему программа запускаться не будет?
Но есть VC 2005
8.0.50727.6195 (соответствует SP1 с MFC Security Update). Там в файле x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_517205a10f4550e3.manifest директива
bindingRedirect:
Код:

<bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.6195"/>
<bindingRedirect oldVersion="8.0.50727.42-8.0.50727.6195" newVersion="8.0.50727.6195"/>
Кроме того, в составе Windows 8 есть сборка Microsoft.VC80.CRT
8.0.50727.6910 и в файле x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6910_none_516a74190f4c088e.manifest директива
bindingRedirect:
Код:

<bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.6910"/>
<bindingRedirect oldVersion="8.0.50727.42-8.0.50727.6910" newVersion="8.0.50727.6910"/>
Так что программа запустится: операционная система вместо старой сборки 8.0.50608.0 загрузит последнюю 8.0.50727.6910.
Если вы по-прежнему мне не верите, вот события из Process Monitor:
Код:

3DMark06.exe 4048 Load Image C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6910_none_d089c358442de345\msvcp80.dll SUCCESS Image Base: 0x6aae0000, Image Size: 0x87000 0.0000000
3DMark06.exe 4048 Load Image C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6910_none_d089c358442de345\msvcr80.dll SUCCESS Image Base: 0x689e0000, Image Size: 0x9b000 0.0000000
P. S. Возможно, поэтому Microsoft в VC 2010 и более новых отказалась от Side-by-side. Смысла нет, ведь все равно используется последняя сборка.
Игры/приложения, требующие VC 2012, просто грузят нужные им библиотеки из System32 (или SysWOW64 в зависимости от разрядности игры/приложения).