Как определить, установлен ли распространяемый Visual C++ 2017

Как Microsoft определяет шаблон записей реестра в своих последних версиях, как я могу определить, установлен ли распространяемый Visual C++ 2017 на компьютере?

Моя цель - установить VC++2015Redist, поскольку программное обеспечение написано с использованием VS2015. Если я могу успешно обнаружить VC++2017Redist на компьютере, то я пропускаю установку VC++2015Redist

4 ответа

Распространяемая установка VC++ 2017 обновляет / заменяет установку 2015 года

Установка распространяемых файлов Visual Studio 2017 обновляет и заменяет любую существующую установку распространяемых файлов 2015 года. Я проверил это, и установка 2015 года исчезает из "Установка и удаление программ", а значениям реестра (см. Ниже) обновляются номера их версий. Кроме того, согласно MSDN распространяемые файлы VC++ 2017 года имеют двоичную совместимость с версией 2015 года.

Можно проверить, установлены ли 2015 или 2017 годы, проверив ключи реестра, описанные ниже. Это для системы x64, посмотрите без Wow6432Node для 32-битной системы.

Ключи:

Для 64-битного распространяемого VC++

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64

Для 32-битного распространяемого VC++

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86

Свойства и значения одинаковы (одинаковый формат) для 32- и 64-разрядных установок. Реестр Значения использования:

Value          2015       2017 
Name      Val. Data  Val. Data
--------  ---------  ---------
Major            14         14
Minor             0         13
Bld           23026      26020

Обратите внимание, что номера @Minor и build (@Bld) 2017 года продолжают меняться по мере обновления новых исправлений.

Я бы посоветовал, если при проверке минимума установлен 2015 год, достаточно просто проверить ключ и версия @Major 14.

Если вы проверяете 2017 год с намерением выполнить обновление, если оно еще не существует, просто проверьте номер @Bld, и, если это не хотя бы версия, которую можно установить, затем установите текущую версию 2017 года. Обратите внимание, что будущие обновления версий @Minor и @Bld вероятны - у меня есть другой компьютер, на котором установлена ​​версия 14.11.25325, также версия 2017 года.

Распространяемый компонент VC теперь присоединен к VisualStudio 2015-2019. Если вы попытаетесь установить "старую" версию (например, только 2015 г.), если у вас есть более новая версия (например, 2017 г.), вы получите сообщение об ошибке (конец этого ответа).

Как писал @CJBS, он записывается в реестры, но, к сожалению, я заметил другое место записи (так что проверьте его также):

Для 32-битного распространяемого пакета VC++

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86

Для 64-битного распространяемого пакета VC++

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64

Я предлагаю прочитать запись @Bld DWord и сравнить ее, чтобы определить, нужна ли вам более свежая версия: 2015 (Bld = 23026) 2017 (Bld = 26020) 2019 (Bld = 27820)


Изображение сообщения об ошибке: 0x80070666 - Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена...

      # Check VCRedist current version
$OS= if ( ${env:ProgramFiles(x86)} ) {"\WOW6432Node"} else {"\"}
    $vcredist = Get-ItemProperty -Path "HKLM:\SOFTWARE$OS\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" -ErrorAction SilentlyContinue -ErrorVariable eVcRedist
if ($eVcRedist) {
    $Warning += @( "Abbyy FineReader 15 requires VCRedist." )
}
elseif (($vcredist.Bld -le 24215)) {
    $Warning += @( "Abbyy FineReader 15 requires VCRedist." )
}

Вы решаете не ту проблему. Вы пытаетесь установить устаревший распространяемый файл, который подходит только для VS2015 (Toolset v140). Вместо этого установите текущий распространяемый VS2017 (Toolset v141). Он обратно совместим с VS2015.

Другие вопросы по тегам