18

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

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

4

4 回答 4

21

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

Visual Studio 2017 Redistributables 的安装升级并替换了 2015 Redistributables 的任何现有安装。我已经检查过了,2015 安装从“添加/删除程序”中消失了,并且注册表值(见下文)更新了它们的版本号。此外,根据 MSDN,2017 VC++ Redistributables与 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

请注意,随着新补丁的更新,2017 年的 @Minor 和内部版本 (@Bld) 编号会继续更改。

我建议,如果检查是否至少安装了 2015,只需检查密钥并且 @Major 版本为 14。

如果检查 2017,如果不存在则打算进行升级,则只需检查 @Bld 编号,如果至少不是可以安装的版本,则继续安装当前的 2017 版本。请注意,@Minor 和@Bld 版本的未来更新很可能——我有另一台安装了 v14.11.25325 的计算机,也是 2017 版本。

于 2018-04-19T18:26:47.630 回答
9

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 - 已安装此产品的另一个版本。无法继续安装此版本...

于 2019-10-03T07:29:47.057 回答
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." )
}
于 2020-12-16T03:13:07.130 回答
-4

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

于 2017-09-12T14:26:11.430 回答