Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Для 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\Программное обеспечение\Wow6432Node\Microsoft....)

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

Коды продуктов распространяемого пакета 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 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}

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

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

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

FWIW, GUIDS для распространяемого 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

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

I открытый исходный код проект 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;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top