Подтвердить что ты не робот

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

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

Программное обеспечение, поддерживающее настройку, зависит от VС++ 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:)

4b9b3361

Ответ 1

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

Ответ 2

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

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

Значения реестра для обнаружения распространяемых пакетов Visual С++ 2010

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

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

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

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

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

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

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

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

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

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

Коды продуктов с расширенным распределением пакетов Visual С++ 2010 SP1

  • Распространяемый пакет Visual С++ 2010 SP1 (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Распространяемый пакет Visual С++ 2010 SP1 (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Распространяемый пакет Visual С++ 2010 SP1 (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}

Ответ 3

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

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

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

FWIW, GUID для Microsoft Visual С++ 2008/VC90 SP1 Распространяемый - x86 9.0.30729

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

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

Ответ 4

I open-sourced проект Visual С++ в Github, который специально проверяет распространяемые DLL файлы VС++ и сделал его доступным в соответствии с лицензией Apache 2.0.

Он имеет три разных метода проверки доступности VС++ 9 и VС++ 10:

  • Проверяет API-интерфейсы MsiQueryProductState;
  • Осмотреть содержимое папки WinSxS для соответствия каталогов продуктов; и
  • Проверяет текущий рабочий каталог для любых локальных версий VС++ 9 и VС++ 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-detect под Apache 2.0, поэтому не стесняйтесь использовать его в своих приложениях.