Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Мультимедиа - Вопрос об установке программы - C++2012

Ответить
Настройки темы
Мультимедиа - Вопрос об установке программы - C++2012

Старожил


Сообщения: 152
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте, подскажите пожалуйста, существует четыре версии программы C++2012, а именно: 11.0.50727.1; 11.0.51106.1; 11.0.60610.1 и самая новая версия - 11.0.61030.0

Мой вопрос: если я установлю самую новую версию - 11.0.61030.0, а для работы игры, например, потребуется более ранняя версия - 11.0.51106.1, то игра заработает или нет, т.е. самая новая версия включает в себя и все более старые версии или нужно устанавливать каждую версию программы C++2012?

Заранее спасибо за Ваши ответы.

Отправлено: 14:43, 02-02-2014

 

Аватара для Demetriadis

Старожил


Сообщения: 227
Благодарности: 122

Профиль | Цитировать


Цитата doc11111:
если я установлю самую новую версию - 11.0.61030.0, а для работы игры, например, потребуется более ранняя версия - 11.0.51106.1, то игра заработает или нет, »
Нет, не заработает. Каждая игра требует определенной версии библиотеки С++.
Цитата doc11111:
т.е. самая новая версия включает в себя и все более старые версии или нужно устанавливать каждую версию программы C++2012? »
Нет, не включает. Все версии С++ устанавливаются side by side(SxS)(совместно друг с другом).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:47, 02-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Moderator


Сообщения: 53585
Благодарности: 15543

Профиль | Отправить PM | Цитировать


Цитата doc11111:
если я установлю самую новую версию - 11.0.61030.0, а для работы игры, например, потребуется более ранняя версия - 11.0.51106.1, то игра заработает
Заработает.

Цитата Demetriadis:
Все версии С++ устанавливаются side by side(SxS)(совместно друг с другом)
По моим наблюдениям, 2005 и 2008 ставились как Side-by-side, а последующие 2010, 2012, 2013 при установке копируются в System32 (и в SysWOW64 в 64-битной системе).

Но даже 2005 и 2008 обычно содержали в манифестах директивы bindingRedirect, например:
Код: Выделить весь код
<bindingRedirect  oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.6161"/>
<bindingRedirect  oldVersion="9.0.30201.0-9.0.30729.6161" newVersion="9.0.30729.6161"/>
Это позволяло приложениям, скомпилированным под старый VC 2008, запускаться с полностью обновленным VC 2008 SP1.

Цитата Demetriadis:
Нет, не включает
Вы имеете в виду разные VC: 2005, 2008, 2010, 2012 и т. д.
Но в данной теме речь идет исключительно о VC 2012.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:17, 02-02-2014 | #3


Аватара для Demetriadis

Старожил


Сообщения: 227
Благодарности: 122

Профиль | Цитировать


Цитата doc11111:
если я установлю самую новую версию - 11.0.61030.0, а для работы игры, например, потребуется более ранняя версия - 11.0.51106.1, то игра заработает или нет, »
А вы проверьте и напишите здесь о результатах. Мое мнение, что нет.
Цитата Petya V4sechkin:
Заработает. »
Заработает, если установлены некоторые обновления (по моему наз. MFC), которые не затрагивают версии нужных игре библиотек.
Цитата Petya V4sechkin:
По моим наблюдениям, 2005 и 2008 ставились как Side-by-side, а последующие 2010, 2012, 2013 при установке копируются в System32 (и в SysWOW64 в 64-битной системе). »
По своему скромному игровому опыту, при установке каждой отдельной игры ставится определенная версия С++ и делается соотв. запись в списке установленных приложений (апплет Установка/удаление программ в Win XP). Там их сейчас около 30-40 разных версий.
Возможно, это просто записи, a файлы обновляются.
Цитата:
Но даже 2005 и 2008 обычно содержали в манифестах директивы bindingRedirect, например:
Тем не менее, играм это не мешает требовать установки распространяемых компонентов определенной версии.

Цитата:
Но в данной теме речь идет исключительно о VC 2012.
Это да. Относительно Visual C++ 2012 возможно и так, хотя наверняка этого не знаю. Пакет обновлений SP1 является накопительным?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:03, 02-02-2014 | #4



Moderator


Сообщения: 53585
Благодарности: 15543

Профиль | Отправить PM | Цитировать


Цитата Demetriadis:
играм это не мешает требовать установки распространяемых компонентов определенной версии
Простой пример: предположим, у нас установлен VC 2008 версии 9.0.30729.6161 (соответствует SP1 с MFC Security Update). А игра требует 9.0.30729.1 (соответствует SP1 без обновлений). Но поскольку в манифесте bindingRedirect, механизм Side-by-side при загрузке библиотек "подсунет" игре 9.0.30729.6161 в любом случае.

P. S. Конечно, 2008 и 2012 (и остальные) друг с другом никак не связаны и не являются взаимозаменяемыми.

Отправлено: 19:31, 02-02-2014 | #5


Аватара для Demetriadis

Старожил


Сообщения: 227
Благодарности: 122

Профиль | Цитировать


Petya V4sechkin, Не подсунет. Проверялось на многих игр. Все равно будет требовать установки именно той версии, под которую заточена данная игра.
Исполняемый файл (exe файл, который вдобавок еще и как правило патченный) игры в не обладает такой логикой и не читает манифесты.
Даже в библиотеке Steam (лицензионные игры) в дистрибутив игр добавляется и устанавливается(в тихом режиме) собственная версия библиотек VС++.
Если следовать вашему примеру, тогда вообще не нужно ничего добавлять в дистрибутив, а ограничиться установкой обновлений из Microsoft Update.

Последний раз редактировалось Demetriadis, 05-02-2014 в 10:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:52, 05-02-2014 | #6



Moderator


Сообщения: 53585
Благодарности: 15543

Профиль | Отправить PM | Цитировать


Цитата 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 в зависимости от разрядности игры/приложения).
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:41, 05-02-2014 | #7


Аватара для Demetriadis

Старожил


Сообщения: 227
Благодарности: 122

Профиль | Цитировать


Цитата Petya V4sechkin:
начит, по-вашему программа запускаться не будет? »
Пример неудачный, в этой утилите есть все необходимые компоненты для запуска и она установит все необходимые файлы автоматически.
Цитата Petya V4sechkin:
операционная система вместо старой сборки 8.0.50608.0 загрузит последнюю 8.0.50727.6910. »
Возможно и сработает, но сомнительно.
Цитата Petya V4sechkin:
Возможно, поэтому Microsoft в VC 2010 и более новых отказалась от Side-by-side. Смысла нет, ведь все равно используется последняя сборка. »
Цитата:
3DMark06.exe 4048 Load Image C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6910_none_d089c358442de345\msvcp 80.dll SUCCESS Image Base: 0x6aae0000, Image Size: 0x87000 0.0000000
Что интересно загрузка происходит из папки WinSxS, а не System32.

Это все очень интересно и занимательно, но пример на утилите 3Dmark, а хотелось проверить на игре.
Остаются вопросы:
Почему игры требуют установки именно конкретных версий С++, даже когда установлена более новая?
Если манифесты могут перенаправлять разные версии, почему производители добавляют устаревшие версии распр. компонентов С++(2005-2008)?
Получается так, что производители игр и др. приложений не знают о манифестах и функциях Windows и пишут код таким образом, чтобы запуск проходил только с определенными версиями С++?

Отправлено: 16:23, 05-02-2014 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Demetriadis:
Почему игры требуют установки именно конкретных версий С++, даже когда установлена более новая? »
Пример.

Отправлено: 17:17, 05-02-2014 | #9



Moderator


Сообщения: 53585
Благодарности: 15543

Профиль | Отправить PM | Цитировать


Цитата Demetriadis:
Пример неудачный, в этой утилите есть все необходимые компоненты для запуска и она установит все необходимые файлы автоматически
Цитата Petya V4sechkin:
Версия VC 2005 8.0.50608.0 не установлена в системе
Цитата Demetriadis:
Возможно и сработает, но сомнительно
Цитата Petya V4sechkin:
вот события из Process Monitor
Цитата Demetriadis:
Что интересно загрузка происходит из папки WinSxS, а не System32
Разумеется, ведь 3DMark 2006 использует VC 2005.
Цитата Petya V4sechkin:
в VC 2010 и более новых отказалась от Side-by-side
Цитата Demetriadis:
Если манифесты могут перенаправлять разные версии, почему производители добавляют устаревшие версии распр. компонентов С++(2005-2008)?
Цитата Petya V4sechkin:
Конечно, 2008 и 2012 (и остальные) друг с другом никак не связаны и не являются взаимозаменяемыми
Другими словами, если приложение скомпилировано под VC 2005, должен быть VC 2005. Оно не будет использовать VC 2008, 2012 и т. д.
Не понимаете? :)
Ну вот есть VC 2005 8.0.50608.0 и 8.0.50727.6195. Это все VC 2005.
Точно также есть VC 2012 11.0.51106.1 и 11.0.61030.0. Это все VC 2012.
Но VC 2012 не заменяет VC 2005 :)

Отправлено: 18:09, 05-02-2014 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Мультимедиа - Вопрос об установке программы - C++2012

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CES 2012: еще пара слов об APU Trinity OSZone News Новости железа 0 13-01-2012 14:30
Интерфейс - Вопрос об устройстве. shivaka Тест-форум 1 07-12-2011 13:27
Отключение предупреждения об установке драйвера Vista mty Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 0 12-02-2008 14:39
Вопрос об очередности monoid Хочу все знать 2 12-08-2003 03:00
об установке перл israelin Вебмастеру 1 10-05-2003 19:36




 
Переход