检测是否安装了Visual Studio 2012的Visual C ++ Redistributable

时间:2012-08-30 22:13:14

标签: visual-c++

如何检测Visual Studio 2012的Visual C ++ Redistributable是否已安装?

我试过谷歌,没人问过这个问题,感到惊讶!

21 个答案:

答案 0 :(得分:151)

这取决于您使用的是哪个版本。这两个2012密钥对我来说效果很好,他们的相应版本可以下载更新4.请注意,其中一些注册位置可能与操作系统有关。我从 Windows 10 x64 框中收集了此信息。我将继续转发所有这些redist版本以及我搜索的用于检测安装的reg键。:

Visual C ++ 2005

Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180

直接下载网址:https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE

Microsoft Visual C++ 2005 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a 
Configuration: x86
Version: 6.0.2900.2180

直接下载网址:https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE

Visual C ++ 2008

Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D 
Configuration: x64
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

直接下载网址:https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe

Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0
Configuration: x86
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])

直接下载网址:https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe

Visual C ++ 2010

Microsoft Visual C++ 2010 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F 
Configuration: x64
Version: 10.0.40219.325

直接下载网址:https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe

Microsoft Visual C++ 2010 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A 
Configuration: x86
Version: 10.0.40219.325

直接下载网址:https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe

Visual C ++ 2012

Microsoft Visual C++ 2012 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6} 
Configuration: x64
Version: 11.0.61030.0

直接下载网址:https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe

Microsoft Visual C++ 2012 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f} 
Configuration: x86
Version: 11.0.61030.0

直接下载网址:https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe

版本警告 :每位用户Wai Ha Lee的调查结果," ... VC ++附带的二进制文件2012年更新4(11.0.61030.0)具有ATL和MFC二进制文件的版本11.0.60610.1,以及其他所有内容的11.0.51106.1,例如msvcp110.dll和msvcr110.dll ..."

Visual C ++ 2013

Microsoft Visual C++ 2013 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f} 
Configuration: x64
Version: 12.0.30501.0

直接下载网址:https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

Microsoft Visual C++ 2013 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} 
Configuration: x86
Version: 12.0.30501.0

直接下载网址:https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe

Visual C ++ 2015

Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{d992c12e-cab2-426f-bde3-fb8c53950b0d}
Configuration: x64
Version: 14.0.24215.1

直接下载网址:https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe

Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{e2803110-78b3-4664-a479-3611a381656a}
Configuration: x86
Version: 14.0.24215.1

直接下载网址:https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe

Visual C ++ 2017

警告:已经使用了新的2017年注册管理机构公约,或者尚未最终确定。正如我猜测最上面的键: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle][HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

可能会发生变化,或者至少有不同的嵌套GUID,我将使用列表以GUID结尾的密钥。

Microsoft Visual C++ 2017 Redistributable (x64) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle\Dependents\{427ada59-85e7-4bc8-b8d5-ebf59db60423}]
Configuration: x64
Version: 14.16.27012.6

直接下载网址:https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe

Microsoft Visual C++ 2017 Redistributable (x86) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle\Dependents\{67f67547-9693-4937-aa13-56e296bd40f6}]
Configuration: x86
Version: 14.16.27012.6

直接下载网址:https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe

更改日志
2018年12月14日 - 根据Jim Wolff的调查结果更新了MSVC2008 for Service Pack 1的9.0.30729.6161更新 2018年11月27日 - 更新了MSVC2017 v。14.16的信息 2018年9月12日 - 根据Wai Ha Lee的调查结果增加版本告知2012 Update 4 2018年8月24日 - 更新了2017年的14.15.26706版本,与VS 2017 15.8.1一起打包的更新的Visual C ++依赖项 2018年5月16日 - 更新2017年的14.14.26405.0版本作为新的C ++ 2017入门作品 2017年9月8日 - 更新2017年版本的14.11.25325.0作为新的Visual C ++ 2017条目
2017年4月7日 - 更新2017年版本的14.10.25008.0作为新的Visual C ++ 2017条目
2016年10月24日 - 更新了2015年14.0.24215.1的版本信息 2016年8月18日 - 更新了2015年14.0.24212的版本信息 2016年5月27日 - 更新了MSVC2015 Update 2的信息

如果这些中的任何一个过时,请与我联系。

答案 1 :(得分:31)

尝试

HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0

作为起点。我将使用它作为安装VC ++ 11(VS 2012)运行时的检查。

答案 2 :(得分:25)

您可以在64位系统上检查此注册表位置中的Installed值为1HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86。在导致访问注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86的代码中。请注意缺少Wow6432Node

在32位系统上,注册表是相同的,没有Wow6432NodeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86

答案 3 :(得分:12)

Visual C ++附带的bootstrapper包清单中没有installcheck元素。猜猜如果你把它设置为先决条件,微软总是希望安装。

当然你仍然可以调用MsiQueryProductState来检查是否通过MSI安装了VC redist包。可以通过运行找到包代码

wmic product get

在命令行,或者如果你已经在wmic:root \ cli,那么运行

product where "Caption like '%C++ 2012%'"

答案 4 :(得分:10)

遗憾的是,这个简单问题的答案并不简单,但在100%的系统中工作,甚至可以扩展到众多.net框架。

复杂性来自这样一个事实:有许多VC运行时修订可能会导致虽然安装了VC10运行时,但它们的内部编号不够新,所以除非你要么EXE不会启动安装了您需要的非常精确的运行时或一个较新的运行时,这些运行时使相同主要版本的此版本和先前版本能够与它一起运行(并排地狱)。 此外,如果您有64位EXE,则必须同时检查32位和64位运行时。

也就是说,确定EXE的运行时是否已安装的唯一可靠方法是尝试运行EXE - 或使用与主EXE相同的设置构建的另一个EXE并且其唯一目的是做 - 没有。只运行(这意味着安装了运行时)或无法运行(未安装时)。

我为需要安装VC10 32和64位运行时的安装程序执行了以下操作:安装程序尝试启动所有虚拟EXE,如果成功,则认为安装了相应的运行时。这也解决了32/64位方案。

顺便说一下,这也可以确定是否安装了正确的.net框架,这在Windows 8和10中非常棘手,因为可下载的内置.net 3.5支持也支持.net版本3.0和2.0 - 没有这些注册表项。 (更糟糕的是,你甚至不能在这里使用标准的框架安装程序,必须使用内置支持并通过Windows下载,或者使用.net 4重建你的应用程序,但这是另一个故事)。

可以使用具有以下代码的项目构建C ++虚拟EXE(如果需要,可以使用64位配置中的另一个):

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

请记住将项目的属性使用MFC 设置为在共享DLL中使用MFC 。 可执行文件的大小约为4KB - 这是一个很小的代价,可以肯定的结果。

为了给您的用户提供良好的安装体验,您可以执行以下操作(示例代码适用于 NSIS ):

Function TryLaunchApplication
  Pop $1 ; pathname
  nsExec::Exec $1
  Pop $0

  ${If} $0 == "error"
  ${OrIf} $0 != 0
    Push 0
  ${Else}
    Push 1
  ${EndIf}
FunctionEnd

并在函数中调用它,例如的 CheckRuntimes

Function CheckRuntimes
  ; Try to execute VC++ 10 application (32 bit)
  Push "Vc10RuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $Vc10RuntimesFound

  ; Add 64 bit check if required.
  ; Remember to try running the 64 bit EXE only on a 64 bit OS,
  ; which requires further checks.

  ; Try to execute .net application
  Push "DotNetRuntimeCheckerApp.exe"
  Call TryLaunchApplication
  Pop $DotNetFrameworkFound
FunctionEnd

然后启动运行时检查,例如离开欢迎页面并缓存结果时,每次用户点击“后退”和“下一步”按钮时都不必重新检查。

接下来,在安装树中创建一个只读部分,并在显示组件页面之前执行的功能上预先选择或取消选择它。

这将确保每个缺少的运行时组件的安装是必需的,如果它已经存在则跳过。

答案 5 :(得分:9)

由于Visual Studio 2010及更高版本已停止使用WinSxS,因此仅检查%windir%\ system32 \ msvcr110.dll就足够了。如果要验证是否有足够新的版本,可以检查文件版本是11.0.50727.1(VS2012 RTM)还是11.0.51106.1(VS2012 Update 1)。

答案 6 :(得分:5)

我遇到了这个问题,在检查Visual C ++可再发行组件作为WiX创建的MSI安装程序的一部分的上下文中寻找答案。

我不知道GUID如何随版本和操作系统发生变化,所以我最终创建了一个用C#编写的自定义操作来检查Visual C ++可再发行组件。

以下所有内容专门针对Visual C ++ 2015 Redistributable(x64),但可以轻松修改任何版本。

using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;

namespace CustomActions
{
    public class DependencyChecks
    {
        [CustomAction]
        public static ActionResult IsVC2015RedistInstalled(Session session)
        {
            session.Log("Begin Visual C++ 2015 Redistributable installation check.");

            var dependenciesKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Installer\\Dependencies");

            foreach(var subKey in dependenciesKey.GetSubKeyNames())
            {
                var dependency = dependenciesKey.OpenSubKey(subKey);
                var displayName = (string)dependency.GetValue("DisplayName");
                if(displayName != null)
                {
                    if (displayName.Contains("Microsoft Visual C++ 2015 Redistributable (x64)"))
                    {
                        session.Log("Visual C++ 2015 Redistributable is installed.");
                        return ActionResult.Success;
                    }
                }
            }

            session.Log("Visual C++ 2015 Redistributable is not installed.");
            session.Message(InstallMessage.Error, new Record(1, "This application requires Visual C++ 2015 Redistributable. Please install, then run this installer again. https://www.microsoft.com/en-us/download/details.aspx?id=53587"));
            return ActionResult.Failure;
        }
    }
}

然后在wxs文件中

<Binary Id='VC2015RedistCheck' SourceFile='!(wix.ResourcesDir=resources)\CustomActions.CA.dll'/>
    <CustomAction
      Id='VC2015RedistCheckAction'
      Execute='immediate'
      BinaryKey='VC2015RedistCheck'
      DllEntry="IsVC2015RedistInstalled"
      Return='check'/>

<InstallExecuteSequence>
  <Custom Action='VC2015RedistCheckAction' After='InstallInitialize'/>
</InstallExecuteSequence>

修改 我更新了这个答案,其中包含有关创建和使用自定义操作的一些基本信息。

要在安装了WiX Toolset Visual Studio 2017扩展的Visual Studio 2017中创建自定义操作,我使用项目模板创建自定义操作(适用于WiX v3的C#Custom Action Project)。

我检查了生成的项目,它似乎已经在本文开头列出了更改:https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed所以我在Adding Custom Action to the Installer部分选择了该文章,然后进行了一些调整。

我做的另一件事是将项目构建的.NET框架的版本更改为3.5。

我没有发现它真的很有用,但您也可以看到http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html

答案 7 :(得分:4)

对我来说,这个位置有效: HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ DevDiv \ VC \维修\ 11.0 \ RuntimeMinimum \版

检查安装软件包后的版本,并将其作为安装程序中的条件使用。 (安装VCred后,我的设置为11.0.50727。)

答案 8 :(得分:4)

转到控制面板&gt;程序和功能,它们都出现在那里。

我不是专家,与人们回答(检查注册表)相比,这个答案非常简单,所以我不确定这是否是正确的答案,但它对我有用。

Programs and Features

答案 9 :(得分:3)

我已成功与InnoSetup合作。

我检查了注册表项的存在:

HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes

如果已卸载,则不存在。如果已安装,则存在。

顺便说一句,它也可能在Wow6432Node中:

HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes

答案 10 :(得分:3)

这个PowerShell代码可以解决这个问题

matching

答案 11 :(得分:3)

通过MsiQueryProductState检查产品的安装状态几乎与直接检查注册表相同,但您仍然需要ProductCode的GUID。

正如其他地方所提到的,这些方法的一个缺点是每个更新都有自己的ProductCode!

值得庆幸的是,MSI提供了一个UpgradeCode来识别一个家庭&#39;的产品。您可以使用orca打开其中一个MSI来提取此信息。例如,VS2015的可再发行版的UpgradeCode为{65E5BD06-6392-3027-8C26-853107D3CF1A}

您可以使用MsiEnumRelatedProducts获取该UpgradeCode的所有产品ID。实际上,由于每个redist更新都替换了前一个redist更新,因此只会生成一个ProductCode - 例如VS2015 Update 2 x86的{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}

无论如何,您可以通过MsiGetProductInfo(productCode,INSTALLPROPERTY_VERSIONSTRING,...)或类似函数检查版本以与您想要的版本进行比较,例如检查等效版本或更高版本。

请注意,在C ++应用程序中,如果_VC_CRT_MAJOR_VERSION,您还可以使用_VC_CRT_MINOR_VERSION_VC_CRT_BUILD_VERSION#include <crtversion.h> - 这样您就可以确定计算CRT版本你的二进制文件是用。

构建的

答案 12 :(得分:3)

if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86","Installed") = 0 Then
  if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86","Installed") = 0 Then

答案 13 :(得分:2)

老问题,但这是我们自Visual Studio 2005以来成功使用的方法。我刚刚使用Visual Studio 2012 Update 4进行了测试(因为我们最终在2010年到2012年之间更新了我们的软件)。

由于Visual C ++ Redistributable软件包使用windows注册卸载程序(因此它显示在控制面板&#34;程序和功能&#34;列表中),我们只需检查注册表中卸载程序密钥的显示名称

以下是相关的NSIS代码:

ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}\" "DisplayName"
StrCmp $0 "Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.61030" vs2012redistInstalled
DetailPrint "Microsoft Visual C++ 2012 Update 4 Redistributable not found!"
DetailPrint "Downloading from www.mywebsite.com"
; insert applicable download code here
ExecWait '"<downloaded redist exe>" /promptrestart /passive'
vs2012redistInstalled:

请注意,由于我们的安装程序是32位exe,因此windows会处理确定注册表项是否实际位于虚拟化Wow6432Node中而不是上述位置,因此上述代码适用于64位和32位Windows安装,而无需明确检查两个键

另请注意,要将上述代码更新为VC ++ Redist的其他版本,只需将注册表项路径中的GUID和显示名称更改为您需要的任何内容。

虽然这可能不是推荐的方法,但在过去的10年里,它已经运行了10,000多台机器,运行XP / XP64到Windows 10的每种风格的窗口,使用2005,2010,201sp1和现在的2012u4的redists。 / p>

答案 14 :(得分:2)

我需要同样的东西,虽然AFAIK不能以编程方式完成,但它对我有用。

我刚开始 - &gt;卸载程序,向下滚动,直到找到包含版本号的VC ++可再发行组件。谷歌搜索版本号,告诉我它属于VS2012 SP1。

答案 15 :(得分:1)

我会检查

Installed

HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}密钥

  • 其中VC++ 2012 (x86)的GUID为{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Node将在场或不在场,具体取决于VC++ redist产品

答案 16 :(得分:0)

大多数人都错过了在Windows x64上检查密钥所需的/reg:32

有关此主题的信息,请参阅Microsoft Help article

这是一个演示如何正确检查Visual Studio 2012 Update 4的Visual C ++ Redistributable的脚本。

@ECHO OFF

:Author
REM "CREATED BY WAR59312"
REM "FEB 7th 2017"

REM Clear Screen
CLS

TITLE Detect Visual C++ 2012 Redistributables

REM This Batch Script Detects If Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed

:DetectWindowsOS
REM Are We Running On x86 Or x64
IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
IF %PROCESSOR_ARCHITECTURE% EQU x86 (
REM Windows Is x86
GoTo Check32Bit
) ELSE (
REM Windows Is x64
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)) ELSE (
REM Windows Is Unknown But Assume x64 To Be Safe
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)

:Check64Bit
REM Checks If Visual C++ 64Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x64" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
  ECHO.
  ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
  ECHO.
  GoTo Check32Bit
) || (
   ECHO.
   ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
   ECHO.
   GoTo Check32Bit
)

:Check32Bit
REM Checks If Visual C++ 32Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
  FIND "v11.0.61030.00" >NUL
) && (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
) || (
   ECHO.
   ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
)

:END
ECHO.
PAUSE

EXIT

答案 17 :(得分:0)

powershell脚本解决方案:

基于@kayleeFrye_onDeck答案中的信息

我创建了一个powershell脚本,用于检查并安装用户指定的版本,但我并未对其进行广泛的测试,但是对于我自己的CI(连续集成)方案,它可以完美地工作。

有关github的完整脚本和信息

我使用的方法是基于根据此处提供的信息检查注册表项。以下是脚本的作用要点:

function Test-RegistryValue {
param (
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Path,
 [parameter(Mandatory=$true)]
 [ValidateNotNullOrEmpty()]$Value
)
    try {
    Get-ItemProperty -Path "$($Path+$Value)" -ErrorAction Stop | Out-Null
        return $true
    }
    catch {
        return $false
    }
}

基于$redistInfo的检查/下载/静默安装,其中包含来自kayleeFrye_onDeck的编译信息。

$redistInstalled = Test-RegistryValue -Path $redistInfo.RegPath -Value $redistInfo.RegValue
if($redistInstalled -eq $False) {
    Invoke-WebRequest -Uri $redistInfo.DownloadUrl -OutFile $downloadTargetPath
    Start-Process -FilePath $downloadTargetPath -ArgumentList "$($redistInfo.SilentInstallArgs)" -Wait -NoNewWindow | Wait-Process
}

完整脚本和更多信息可以在github

上找到

任何人都可以贡献力量,如果我有时间的话,我将对脚本进行更广泛的测试,并在此处添加信息时继续尝试添加新软件包。

答案 18 :(得分:0)

很难获得VC 2012的所有注册表值,所以我写了一个小函数,它将遍历所有依赖项并与指定版本匹配。

public static bool IsVC2012Installed()
{
    string dependenciesPath = @"SOFTWARE\Classes\Installer\Dependencies";

    using (RegistryKey dependencies = Registry.LocalMachine.OpenSubKey(dependenciesPath))
    {
        if (dependencies == null) return false;

        foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft")))
        {
            using (RegistryKey subDir = Registry.LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName))
            {
                var value = subDir.GetValue("DisplayName")?.ToString() ?? null;
                if (string.IsNullOrEmpty(value)) continue;

                if (Regex.IsMatch(value, @"C\+\+ 2012")) //here u can specify your version.
                {
                    return true;
                }
            }
        }
    }

    return false;
}

依赖项:

using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;

答案 19 :(得分:0)

我在 Server 2019 和 Windows 10 中为 PowerShell 使用了这一行。我不知道 这是如何向后兼容的。

Get-CimInstance -Class Win32_Product -Filter "Name LIKE '%Visual C++ %Redistri%'" | Select Name, Caption, Version

答案 20 :(得分:-6)

你可以在注册表中搜索。实际上我没有vs2012但我有vs2010。

3个平台包中的每一个都有3个不同(但非常相似)的注册表项。每个键都有一个名为“Installed”的DWORD值,值为1.

  • HKLM \ SOFTWARE \微软\ VisualStudio的\ 10.0 \ VC \ VCRedist \ X86

  • HKLM \ SOFTWARE \微软\ VisualStudio的\ 10.0 \ VC \ VCRedist \ 64

  • HKLM \ SOFTWARE \微软\ VisualStudio的\ 10.0 \ VC \ VCRedist \ IA64

您可以使用注册表功能......