2009-04-08 3 views
20

У меня есть вопрос, очень похожий на this one, но ответ не работает для меня.Как определить, нужно ли устанавливать 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, или есть что-то, чего я не вижу на этом этапе? Есть ли где-нибудь таблица с внутренними и «внешними» номерами версий, поэтому я мог бы указать некоторый номер младшей версии?

Я не могу поверить, что нет ничего, предоставленный корпорацией Майкрософт для данного сценария, но поиск межсетях для уже слишком долго, теперь возвращает меня к добрым так :)

ответ

8

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

+0

принял это сейчас. Это то, что я делаю сейчас. Другие приводят к проблемам (в одном из двух случаев обнаружения) на W2K8. – lImbus

+4

Если вы это сделаете, обязательно принимайте и игнорируйте код ошибки 5100 («более новая версия уже установлена»). В последнее время у нас была небольшая боль в установщике PostgreSQL. –

+6

Всегда работает переделка занимает много времени. – sorin

6

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

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

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

FWIW, GUID, для Microsoft Visual C++ 2008/VC90 SP1 Redistributable - 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*

13

Для Visual Studio C++ 2010, things got a bit easier.

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

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

Visual C++ 2010 Redistributable Package (x86)

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

Visual C++ 2010 Redistributable Package (x64)

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

Visual C++ 2010 Redistributable Package (ia64)

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

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

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

C++ 2010 распространяемых коды Визуальных пакет продукты

  • Visual C++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD 72A1B}

Визуальные коды продукта C++ 2010 SP1 распространяемый пакет

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

Спасибо !, Эта часть действительно помогла мне ... Примечание: вам нужно будет проверить под Wow6432Node в 64-разрядной ОС. (HKLM \ Software \ Wow6432Node \ Microsoft ....) – Joe

3

Я открыл исходный код a Visual C++ project on Github that checks for VC++ redistributable DLLs и сделал его доступным под лицензией Apache 2.0.

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

  1. проверяет MsiQueryProductState Apis;
  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, так что не стесняйтесь использовать его в своих приложениях.

+0

Люблю вас спасибо! –

Смежные вопросы