Как определить, нужно ли мне устанавливать VCRedist?

У меня вопрос, очень похожий на этот, но ответ не подходит для меня.

Программное обеспечение, для которого я поддерживаю настройку, зависит от VC ++ 2008 (точнее, SP1), поэтому мне нужно найти решение для установки VCRedist, если он еще не установлен. Я понимаю, что правильным способом было бы создать msi с модулями слияния, но это не в моих руках.

Ответ на повторяющийся вопрос, о котором я говорю (принятый), не работает для меня, потому что каждый крошечный выпуск (например, 9.0.30729.01 против 9.0.30729.17) имеет правильные GUID, которые я не могу угадать или предсказать для будущих версий . Кроме того, я считаю, что это не обнаружит Visual Studios и, следовательно, без необходимости установит пакет VCRedist, когда он уже находится на машине разработчика. Я не хочу никого беспокоить этим, особенно тех, у кого уже установлена ​​DevStudio.

Теперь в другом ответе говорится, что я должен искать в папке WinSxs, например $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_, но это (пока) не помогает мне подразумевать SP1, или есть ли что-то, чего мне не хватает на данный момент? Есть ли где-нибудь таблица с внутренними и «внешними» номерами версий, чтобы я мог подразумевать некоторый дополнительный номер версии?

Я не могу поверить, что Microsoft ничего не предлагает для этого сценария, но поиск в сети уже слишком долго возвращает меня к старому доброму SO :)


person Community    schedule 08.04.2009    source источник


Ответы (4)


Вы можете использовать рекомендуемый подход для установки DirectX: всегда запускайте распространяемый файл. Поскольку он необходим, и вы уже отправляете его, запускать его не составит труда, даже если он уже установлен.

person Shea    schedule 08.04.2009
comment
принял это сейчас. Вот чем я сейчас занимаюсь. Другой приводит к проблемам (в одном из двух случаев обнаружения) на W2K8. - person lImbus; 11.11.2009
comment
В этом случае обязательно примите и проигнорируйте код ошибки 5100 (более новая версия уже установлена). В последнее время у нас были проблемы с этим в установщике PostgreSQL. - person Craig Ringer; 09.06.2012
comment
Постоянный запуск redist занимает много времени. - person sorin; 18.07.2013
comment
Постоянный запуск установщика приводит к срабатыванию параметра repair, если он уже установлен и отображается пользовательский интерфейс. И это, кажется, вызывает необходимость перезагрузки. - person CaptainBli; 04.09.2014
comment
в исходном вопросе нет упоминания о directx, возможно, кто-то должен обновить заголовок и повторно пометить вопрос, чтобы мы не перенаправлялись читать что-то, что не представляет для нас никакой ценности. - person Shaun Wilson; 08.09.2015

Для Visual Studio C ++ 2010 все стало немного проще.

В отличие от распространяемых пакетов Visual C ++ 2005 и 2008, существуют разделы реестра, которые можно использовать для обнаружения присутствия распространяемого пакета Visual C ++ 2010.

Значения реестра обнаружения распространяемого пакета Visual C ++ 2010

Распространяемый пакет Visual C ++ 2010 (x86)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86] Установлено = 1 (REG_DWORD)

Распространяемый пакет Visual C ++ 2010 (x64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64] Установлено = 1 (REG_DWORD)

Распространяемый пакет Visual C ++ 2010 (ia64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64] Установлено = 1 (REG_DWORD)

Примечание. Вам нужно будет проверить под Wow6432Node в 64-разрядной ОС. (HKLM \ Software \ Wow6432Node \ Microsoft ....)

Если вам нравится более старая версия, вот GUID

Коды продуктов распространяемого пакета Visual C ++ 2010

  • Распространяемый пакет Visual C ++ 2010 (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Распространяемый пакет Visual C ++ 2010 (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Распространяемый пакет Visual C ++ 2010 (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Коды продуктов распространяемого пакета Visual C ++ 2010 с пакетом обновления 1 (SP1)

  • Распространяемый пакет Visual C ++ 2010 SP1 (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Распространяемый пакет Visual C ++ 2010 SP1 (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Распространяемый пакет Visual C ++ 2010 SP1 (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
person Community    schedule 18.12.2011
comment
Спасибо !, Эта часть мне действительно помогла ... Примечание: вам нужно будет проверить под Wow6432Node в 64-битной ОС. (HKLM \ Software \ Wow6432Node \ Microsoft ....) - person Joe; 25.05.2012

похоже, есть другое решение, предложенное Microsoft- Разработчик, использующий MsiQueryProductState API, увы, также полагается на GUID.

Обновление: код был запущен вчера и, похоже, работает нормально. Вот что делается: проверяется наличие последнего известного мне GUID И пути² к месту, где он должен быть установлен. Если оба выходят из строя, он устанавливается. Кажется, это нормально работает.

Кроме того, он устанавливается с аргументами командной строки «/ qb», что означает «автоматический, но не невидимый». См. это другое сообщение в блоге об этих параметрах.

FWIW, GUID для распространяемого пакета Microsoft Visual C ++ 2008 / VC90 SP1 - x86 9.0.30729

  • 64-битная 30729.17: 8220EEFE-38CD-377E-8595-13398D740ACE
  • 32-битная 30729.17: 9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32-битная 30729.01: 6AFCA4E1-9B78-3640-8F72-A7BF33448200

² Путь: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

person Community    schedule 09.04.2009

Я открыл проект Visual C ++ на Github, который специально проверяет распространяемые библиотеки DLL VC ++ и сделал он доступен по лицензии Apache 2.0.

Он имеет три различных метода проверки доступности сред выполнения VC ++ 9 и VC ++ 10:

  1. Проверяет API MsiQueryProductState;
  2. Проверьте содержимое папки WinSxS на соответствие каталогам продуктов; и
  3. Проверяет текущий рабочий каталог на наличие любых локальных версий сред выполнения VC ++ 9 и VC ++ 10 (и проверяет их содержимое).

Вот пример того, как это выглядит на самом деле:

 wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
 wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
 wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;

Я лицензировал проект crt-Detector под Apache 2.0, поэтому не стесняйтесь использовать его в своих собственных приложениях.

person Community    schedule 14.11.2013