如何检测是否安装了Visual C ++ 2017 Redistributable

时间:2017-09-12 14:04:34

标签: visual-c++ redistributable vcredist visual-c++-2015 visual-c++-2017

随着Microsoft在其最新版本中更改注册表项的模式,我如何检测是否在计算机上安装了Visual C ++ 2017 Redistributable?

我的目标是安装VC ++ 2015Redist,因为该软件是使用VS2015编写的。如果我能在一台机器上成功检测到VC ++ 2017Redist,那么我跳过安装VC ++ 2015Redist

4 个答案:

答案 0 :(得分:7)

2017 VC ++ Redistributable安装升级/替换2015安装

安装Visual Studio 2017 Redistributables升级并替换2015 Redistributables的任何现有安装。我已对此进行了检查,2015安装将从"添加/删除程序"中消失,注册表值(见下文)的版本号已更新。此外,per MSDN,2017 VC ++ Redistributables与2015版本具有二进制兼容性

通过检查下面描述的注册表项,可以检查2015或2017是否已安装。这适用于x64系统,对于32位系统看起来没有Wow6432Node

键:

适用于64位VC ++ Redistributable

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

适用于32位VC ++ Redistributable

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

请注意,随着新补丁的更新,2017年的@Minor和build(@Bld)数字会继续变化。

我建议,如果检查安装了2015的最小值,只需检查密钥并且@Major版本是14。

如果检查2017年,如果它不存在则打算进行升级,那么只需检查@Bld号码,如果它不是至少可以安装的版本,然后继续安装当前的2017版本。请注意,未来可能会更新@Minor和@Bld版本 - 我已经安装了另一台安装了v14.11.25325的计算机,也是2017版本。

答案 1 :(得分:0)

VC可重新分发现在为joined for 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)


Error message image:0x80070666-已经安装了该产品的另一个版本。此版本的安装无法继续...

答案 2 :(得分:0)

# 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." )
}

答案 3 :(得分:-3)

你正在解决错误的问题。您正在尝试安装仅适用于VS2015(Toolset v140)的过时可再发行组件。而是安装当前的VS2017可再发行组件(Toolset v141)。它向后兼容VS2015。