Как определить, установлен ли распространяемый пакет Visual C ++ для Visual Studio 2012?
Я попробовал Google, и никто не задавал этот вопрос, сюрприз!
visual-c++
sean717
источник
источник
Ответы:
Это зависит от того, какую версию вы используете. Эти два ключа 2012 года хорошо зарекомендовали себя с их соответствующими версиями, загружаемыми для обновления 4. Имейте в виду, что некоторые из этих расположений реестра могут зависеть от ОС. Я собрал эту информацию из окна Windows 10 x64 . Я просто собираюсь выгрузить все эти распространенные версии и ключи реестра, которые я ищу для обнаружения установки:
Visual C ++ 2005
URL-адрес прямой загрузки: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
URL-адрес прямой загрузки: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Visual C ++ 2008
URL-адрес прямой загрузки: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
URL-адрес прямой загрузки: https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Visual C ++ 2010
URL-адрес прямой загрузки: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
URL-адрес прямой загрузки: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Visual C ++ 2012
URL для прямой загрузки: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
URL-адрес прямой загрузки: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
Предупреждение о версии : Согласновыводампользователя Вай Ха Ли , «... двоичные файлы, которые поставляются с VC ++ 2012 update 4 (
11.0.61030.0
), имеют версии11.0.60610.1
для двоичных файлов ATL и MFC, а также11.0.51106.1
для всего остального, например msvcp110.dll и msvcr110.dll . .. "Visual C ++ 2013
URL прямой загрузки: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
URL-адрес прямой загрузки: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Visual C ++ 2015
Рассмотрите возможность использования пакета 2015-2019 в качестве альтернативы
URL-адрес прямой загрузки: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
URL-адрес прямой загрузки: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Visual C ++ 2017
Рассмотрите возможность использования пакета 2015-2019 в качестве альтернативы
Предостережение : либо используется новое соглашение о реестре 2017 года, либо оно еще не доработано. Как я предполагаю, самые верхние клавиши:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
и[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
могут быть изменены или, по крайней мере, имеют разные вложенные идентификаторы GUID, я собираюсь использовать list ключ, заканчивающийся на GUID.
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Visual C ++ 2019 ( пакет 2015-2019 )
Предостережение : для Visual C ++ 2019 используется еще одно новое соглашение о реестре. Также, похоже, не существует автономного установщика для Visual C ++ 2019, только этот установщик пакета, который является Visual C ++ с 2015 по 2019.
14.21.27702
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe
URL-адрес прямой загрузки: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Журнал изменений :
19 августа 2019 г. - Добавлена новая версия пакета 2015-2019 версии
13 июня 2019 г. - Добавлен новый раздел для версии пакета 2015-2019 гг.
14.21.27702
И добавлены небольшие примечания к разделам 2015 и 2017 гг. О рассмотрении использования новый комплект в качестве альтернативы.14 декабря 2018 г. - Обновлен MSVC2008 для обновления пакета обновления 1 в
9.0.30729.6161
соответствии с выводами Джима Вольфа27 ноября 2018 г. - обновлена информация для MSVC2017 v.
14.16
12 сентября 2018 г. - добавлено предупреждение о версии для обновления 4 2012 г. по данным Вай Ха Ли
24 августа, 2018 - обновленная версия 2017 года для 14.15.26706, обновленные зависимости Visual C ++, упакованные с VS 2017 15.8.1
16 мая 2018 г. - обновленная версия 2017 г. для 14.14.26405.0 как новая запись C ++ 2017
8 сентября 2017 г. - обновленная версия 2017 г. для 14.11.25325.0 как новая запись Visual C ++ 2017
7 апреля 2017 г. - обновленная версия 2017 г. 14.10 .25008.0 в качестве новой записи Visual C ++ 2017
24 октября 2016 г. - обновлена информация о версии 2015 г. для 14.0.24215.1
18 августа 2016 г. - обновлена информация о версии 2015 г. для 14.0.24212
27 мая 2016 г. - обновлена информация для MSVC2015 с обновлением 2
Пожалуйста, свяжитесь со мной здесь, если что-либо из этого устарело.
источник
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
и[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
Пытаться
в качестве отправной точки. Я буду использовать это как проверку для установки среды выполнения VC ++ 11 (VS 2012).
источник
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Вы можете проверить, находится ли
Installed
значение1
в этом месте реестра:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
в 64-битных системах. В коде, который приведет к доступу к разделу реестраHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Обратите внимание на отсутствиеWow6432Node
.В 32-битной системе реестр такой же, без
Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
источник
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
но у меня нетRuntimes
ключа. У меня есть ключ в ответе ДэйваHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.В манифесте пакета загрузчика, поставляемом с Visual C ++, нет элемента installcheck. Думаю, Microsoft хочет всегда устанавливать, если вы установите это в качестве предварительного условия.
Конечно, вы все равно можете вызвать MsiQueryProductState, чтобы проверить, установлен ли пакет VC redist через MSI. Код пакета можно найти, запустив
в командной строке или, если вы уже находитесь в wmic: root \ cli, запустите
источник
Ответ на этот простой вопрос, к сожалению, непрост, но он работает в 100% всех систем и даже может быть расширен на множество фреймворков .net.
Сложность связана с тем фактом, что существует (и было) множество ревизий среды выполнения VC, которые могут привести к тому, что, хотя среды выполнения VC10 были установлены, их номер сборки был недостаточно свежим, поэтому ваш EXE не запускался, если вы не установили сам точное время выполнения, которое вам нужно, или одно из новых сред выполнения, которое позволяет этой и предыдущей версиям для одной и той же основной версии работать с ним (параллельный ад). Кроме того, если у вас 64-разрядный EXE, вам нужно будет проверить как 32-, так и 64-разрядную среду выполнения.
Тем не менее, единственный надежный способ определить, установлены ли среды выполнения для вашего EXE, - это попытаться запустить EXE - или другой EXE, созданный с теми же настройками, что и ваш основной EXE, и единственная цель которого - ничего не делать. Просто запустите (что означает, что среда выполнения установлена) или не запустится (если не установлена).
Я сделал следующее для установщика, который требовал установки 32- и 64-разрядной среды выполнения VC10: Программа установки пытается запустить все фиктивные EXE-файлы, и в случае успеха соответствующая среда выполнения считается установленной. Это также решает 32/64 битный сценарий.
Это, кстати, также помогает определить, установлена ли надлежащая платформа .net, что очень сложно в Windows 8 и 10, поскольку загружаемая встроенная поддержка .net 3.5 также поддерживает версии .net 3.0 и 2.0 - там для них нет записей в реестре. (И что еще хуже, вы даже не можете использовать здесь стандартные установщики фреймворка, вы должны использовать встроенную поддержку и загрузить ее через Windows, или пересобрать свое приложение с помощью .net 4, но это уже другая история).
Пустой EXE-файл C ++ может быть создан с использованием проекта со следующим кодом (и еще одним в 64-битной конфигурации, если необходимо):
Не забудьте установить свойства проекта « Использование MFC» для использования MFC в общей DLL . Размер исполняемых файлов составит около 4 КБ - небольшая цена за гарантированный результат.
Чтобы пользователям было удобно при установке, вы можете сделать следующее (пример кода для NSIS ):
и вызовите его в функции, например, CheckRuntimes
Затем запустите проверку времени выполнения, например, при выходе из страницы приветствия и кешируйте результат, чтобы вам не приходилось повторно проверять каждый раз, когда пользователь нажимает кнопки «Назад» и «Далее».
Затем создайте раздел в дереве установки, доступный только для чтения, и предварительно выберите или отмените его выбор в функции, которая выполняется до отображения страницы « Компоненты» .
Это гарантирует, что установка каждого отсутствующего компонента среды выполнения будет обязательной и будет пропущена, если она уже есть.
источник
Поскольку Visual Studio 2010 и более поздние версии перестали использовать WinSxS, может быть достаточно просто проверить наличие% windir% \ system32 \ msvcr110.dll. Если вы хотите убедиться, что у вас достаточно новая версия, вы можете проверить, является ли версия файла 11.0.50727.1 (VS2012 RTM) или 11.0.51106.1 (VS2012 Update 1).
источник
11.0.61030.0
), имеют версии11.0.60610.1
для двоичных файлов ATL и MFC, а также11.0.51106.1
для всего остального, например msvcp110.dll и msvcr110.dll. Не знаю почему. Вы можете подтвердить это (на машинах с Windows 10, на которых я его тестировал), перейдяC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
иC:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
проверив файлы в файлах .cab.Я столкнулся с этим вопросом в поисках ответа в контексте проверки распространяемого пакета Visual C ++ как части установщика MSI, созданного WiX.
Мне не нравилось, как меняется GUID в зависимости от версии и операционной системы, поэтому я создал настраиваемое действие, написанное на C #, для проверки распространяемого пакета Visual C ++.
Все нижеприведенное предназначено специально для Visual C ++ 2015 Redistributable (x64), но его можно легко изменить для любой версии.
Затем в файле wxs
Изменить Я обновляю этот ответ, добавляя некоторую базовую информацию о создании и использовании настраиваемого действия.
Чтобы создать настраиваемое действие в Visual Studio 2017 с установленным расширением WiX Toolset Visual Studio 2017, я использовал шаблон проекта для создания настраиваемого действия (C # Custom Action Project для WiX v3).
Я проверил сгенерированный проект, и, похоже, в нем уже есть изменения, перечисленные в начале этой статьи: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed поэтому я взял эту статью в разделе
Adding Custom Action to the Installer
и дополнил ее некоторыми поправками.Еще одна вещь, которую я сделал, - это изменила версию .NET framework, на которой построен проект, на 3.5.
Мне это не показалось действительно полезным, но вы также можете посмотреть http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
источник
Для меня это место работало: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Проверьте, какая у вас версия после установки пакета, и используйте ее в качестве условия в установщике. (у меня установлено значение 11.0.50727 после установки VCred).
источник
Просто зайдите в Панель управления> Программы и компоненты, и все они появятся в списке.
Я не эксперт, и этот ответ довольно прост по сравнению с тем, что люди отвечают (проверяют реестр), поэтому я не уверен, правильный ли это ответ, но он помог мне.
источник
источник
Мне удалось сделать это с помощью InnoSetup.
Я проверил наличие ключа реестра:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
В случае удаления его не существует. Если установлен, он существует.
Кстати, это тоже могло быть в Wow6432Node:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
источник
Проверка состояния установки продукта через MsiQueryProductState в значительной степени эквивалентна проверке реестра напрямую, но вам все равно понадобится GUID для ProductCode .
Как упоминалось в другом месте, одним из недостатков этих подходов является то, что каждое обновление имеет свой собственный ProductCode!
К счастью, MSI предоставляет UpgradeCode, который определяет «семейство» продуктов. Вы можете использовать orca, чтобы открыть один из MSI для извлечения этой информации. Например, UpgradeCode для распространяемого пакета VS2015:
{65E5BD06-6392-3027-8C26-853107D3CF1A}
Вы можете использовать MsiEnumRelatedProducts, чтобы получить все идентификаторы продуктов для этого UpgradeCode. На практике, поскольку каждое повторное обновление заменяет предыдущее, это дает только один ProductCode - например,
{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
для VS2015 Update 2 x86.В любом случае вы можете затем проверить версию с помощью MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) или аналогичных функций для сравнения с нужной вам версией, например, чтобы проверить наличие эквивалентной или более поздней версии.
Обратите внимание , что в приложении C ++, вы можете также использовать
_VC_CRT_MAJOR_VERSION
,_VC_CRT_MINOR_VERSION
,_VC_CRT_BUILD_VERSION
если вы#include <crtversion.h>
- таким образом , вы можете определить , вычислить версию CRT , что бинарный файл был построен с.источник
Этот код PowerShell должен помочь
источник
Мне нужно было то же самое, и хотя AFAIK это нельзя сделать программно, у меня это сработало.
Я просто пошел в Пуск -> Удалить программу и прокручивал вниз, пока не нашел распространяемый пакет VC ++, который включает номер версии. Погуглил номер версии, сказал мне, что он принадлежит VS2012 SP1.
источник
Старый вопрос, но вот подход, который мы успешно использовали с Visual Studio 2005. Я только что протестировал его с помощью Visual Studio 2012 Update 4 (поскольку мы, наконец, обновляем наше программное обеспечение с 2010 по 2012 год).
Поскольку распространяемые пакеты Visual C ++ регистрируют свой деинсталлятор в Windows (чтобы он отображался в списке «Программы и компоненты» панели управления), мы просто проверяем отображаемое имя раздела деинсталлятора в реестре.
Вот соответствующий код NSIS:
Обратите внимание: поскольку наш установщик является 32-битным exe-файлом, Windows определяет, действительно ли ключ реестра находится в виртуализированном узле Wow6432Node, а не в указанном выше месте, поэтому приведенный выше код работает как при установке 64-битных, так и 32-битных окон без необходимости явно проверять оба ключа.
Также обратите внимание, что для обновления приведенного выше кода до другой версии VC ++ Redist просто измените GUID в пути к ключу реестра и отображаемое имя на все, что вам нужно.
Хотя это может быть не рекомендуемый метод, за последние 10 лет он работал на более чем 10 000 машинах, на которых были запущены все разновидности окон от XP / XP64 до Windows 10 с использованием повторных списков для 2005, 2010, 2010sp1, а теперь и 2012u4.
источник
Я бы проверил
Installed
стоимостьHKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
ключVC++ 2012 (x86)
IS{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
будет присутствовать или нет в зависимости отVC++ redist
продуктаисточник
Большинство людей упускают из виду необходимость
/reg:32
проверки ключа в Windows x64.См. Статью справки Microsoft по этому вопросу.
Вот сценарий, демонстрирующий, как правильно проверить наличие распространяемого пакета Visual C ++ для Visual Studio 2012 с обновлением 4.
источник
Решение сценария powershell:
На основании информации в ответе @kayleeFrye_onDeck
Я создал сценарий PowerShell, который проверяет и устанавливает версии, указанные пользователем, я не проводил с ним обширного тестирования, но для моего собственного сценария CI (непрерывная интеграция) он отлично работает.
Полный скрипт и информация на github
Подход, который я использовал, основывался на проверке ключей regkeys на основе информации, представленной здесь. Ниже приводится суть того, что делает сценарий:
Проверка / загрузка / тихая установка, на основе
$redistInfo
которой содержится скомпилированная информация из файла kayleeFrye_onDeck's.Полный сценарий и дополнительную информацию можно найти на github
Любой желающий может внести свой вклад, если у меня будет время, я проведу более обширное тестирование скрипта и буду продолжать попытки добавлять новые пакеты по мере добавления информации здесь.
источник
Получить все значения реестра для VC 2012 сложно, поэтому я написал небольшую функцию, которая будет проверять все зависимости и соответствовать указанной версии.
Зависимости:
источник
Вы можете искать в реестре. На самом деле у меня нет vs2012, но есть vs2010.
Есть 3 разных (но очень похожих) ключа реестра для каждого из 3 пакетов платформы. Каждый ключ имеет значение DWORD, называемое «Установлено», со значением 1.
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64
Для этого вы можете использовать функцию реестра ......
источник
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...