Как определить, установлен ли распространяемый 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.