问题
With Microsoft changing the pattern of registry entries in its latest versions, how do i detect if Visual C++ 2017 Redistributable is installed on a machine?
My aim is to install VC++2015Redist since the software is written using VS2015. If i can successfully detect VC++2017Redist on a machine, then I skip my installation of VC++2015Redist
回答1:
The 2017 VC++ Redistributable installation upgrades/REPLACES the 2015 installation
Installation of the Visual Studio 2017 Redistributables upgrades and replaces any existing installation of the 2015 Redistributables. I've checked this, and the 2015 installation disappears from "Add/Remove Programs", and the registry values (see below) have their version numbers updated. Further, per MSDN, the 2017 VC++ Redistributables have Binary Compatibility with the 2015 version.
It's possible to check whether 2015 or 2017 are installed by checking the registry keys described below. This is for a x64 system, have a look without the Wow6432Node
for a 32-bit system.
Keys:
For 64-bit VC++ Redistributable
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64
For 32-bit VC++ Redistributable
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86
The properties and values are the same (same format) for both 32- and 64-bit installations. Registry Values of use:
Value 2015 2017
Name Val. Data Val. Data
-------- --------- ---------
Major 14 14
Minor 0 13
Bld 23026 26020
Note that the @Minor and build (@Bld) numbers of 2017 continue to change as new patches are updated.
I would suggest, if checking for a minimum that 2015 is installed, just checking the key and that the @Major version is 14.
If checking for 2017, with the intention of doing an upgrade if it's not in existence, then just check the @Bld number, and if it's not at least the version that can be installed, then go ahead and install the current 2017 version. Note that future updates the the @Minor and @Bld version are probable -- I've got another computer where v14.11.25325 is installed, also a 2017 version.
回答2:
VC redistributable is now joined for VisualStudio 2015-2019. If you try to install "older" one (e.g. just 2015) if you have any newer version (e.g 2017) you get error (end of this reply).
As @CJBS wrote, it writes itself to registries, but sadly I have noticed another place of record (so check it also):
For 32-bit VC++ Redistributable
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86
For 64-bit VC++ Redistributable
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64
I suggest to read @Bld DWord record and compare it to determine if you need more recent version: 2015 (Bld = 23026) 2017 (Bld = 26020) 2019 (Bld = 27820)
Error message image: 0x80070666 - Another version of this product is already installed. Installation of this version cannot continue...
回答3:
You're solving the wrong problem. You're trying to install an outdated redistributable that was only suitable for VS2015 (Toolset v140). Instead, install the current VS2017 redistributable (Toolset v141). It's backwards compatible with VS2015.
来源:https://stackoverflow.com/questions/46178559/how-to-detect-if-visual-c-2017-redistributable-is-installed