Detecteren als Visual C++ Redistributable For Visual Studio 2012 is geïnstalleerd

Hoe te detecteren of Visual C++ herdistribuable voor visuele studio 2012 is geïnstalleerd?

Ik probeerde Google IT en niemand heeft deze vraag gesteld, verrassing!


Antwoord 1, Autoriteit 100%

Het hangt af van welke versie u gebruikt. Deze twee 2012-toetsen hebben goed voor mij gewerkt met hun bijbehorende versies om te downloaden voor update 4. Houd er rekening mee dat sommige van deze REG-locaties OS-afhankelijk kunnen zijn. Ik heb deze informatie verzameld van een Windows 10 X64 -box. Ik ga gewoon doorgaan en dumpen al deze redistische versies en de REG-toetsen die ik zoek naar detecteerinstallatie.:


Visual C++ 2005

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

Directe download-URL: 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

Directe download-URL: 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])

Directe download URL: 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])

Directe download URL: 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

Directe download-URL: 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

Directe download-URL: 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

Directe download-URL: 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

Directe download-URL: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe

versievoorbehoud: per gebruiker Wai Ha Lee‘s bevindingen, “…de binaire bestanden die worden geleverd met VC++ 2012 update 4 (11.0.61030.0) hebben versie 11.0.60610.1voor de ATL en MFC binaire bestanden, en 11.0.51106.1voor al het andere, bijv. msvcp110.dll en msvcr110.dll…”

Aanvullende waarschuwing — 2012 Update 4: Per gebruiker Krptodr
VC++ 2012 Update 4 (x86) wordt weergegeven onder GUID {95716cce-fc71-413f-8ad5-56c2892d4b3a}

VC++ 2012 Update 4 (x64) wordt weergegeven onder GUID {a1909659-0a08-4554-8af1-2175904903a1}

^^ De meegeleverde GUID’s zijn voor het installatiepakket. Deze vertakken zich echter in twee andere GUID’s van hun boogtype. Raadpleeg voor meer informatie de volgende bron Hoe te controleren of Microsoft Visual C++ Runtime is geïnstalleerd


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

Directe download-URL: 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

Directe download-URL: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe


Visual C++ 2015

Overweeg om de bundel 2015-2019 als alternatief te gebruiken

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

Directe download-URL: 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

Directe download URL: https://download.microsoft.com/download/6/a/a/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/VC_REDIST.X86.EXE


Visual C++ 2017

Overweeg de bundel van 2015-2019 als een alternatief

Voorzien : er is een nieuw registerverdrag van 2017 dat wordt gebruikt, of het is nog niet voltooid. Als ik de bovenste meest sleutels van:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
en
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

zijn onderhevig aan verandering, of hebben tenminste verschillende geneste gids, ik ga de toets die eindigt met een 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

Directe download URL: https://download.visualstudio.microsoft.com/download/pr/9FBED7C7-7012-4CC0-A0A3-A541F51981B5/E7EEC19D78B4473E26D7E32CEF53A34C/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

Directe download URL: https://download.visualstudio.microsoft.com/download/pr/d0b808A8-AA78-4250-8E54-49B8C23F7328/9C5E6532055786367E61AAFB3313C95/VC_REDIST.X86.EXE


Visual C++ 2019 (2015-2019 Bundel )

Bereik : er is nog een nieuwe registerverdrag die wordt gebruikt voor visuele C++ 2019. Er lijkt ook geen stand-alone installatieprogramma te zijn voor Visual C++ 2019, alleen dit bundel-installatieprogramma dat is Visual C++ 2015 2019.

14.21.27702

Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.21,bundle\Dependents\{f4220b74-9edd-4ded-bc8b-0342c1e164d8}]
Configuration: x64
Version: 14.21.27702  

Directe download-URL: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.21,bundle\Dependents\{49697869-be8e-427d-81a0-c334d1d14950}]
Configuration: x86
Version: 14.21.27702

Directe download-URL: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7EC-4500-A461-71E8912D25E9/99BA493D660597490CBB8B3211D2CAE4/VC_REDIST.X86.EXE

14.22.27821

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.22,bundle\Dependents\{5bfc1380-fd35-4b85-9715-7351535d077e}]
Configuration: x86
Version: 14.22.27821

Directe download-URL:
https:// download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe

Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.22,bundle\Dependents\{6361b579-2795-4886-b2a8-53d5239b6452}]
Configuration: x64
Version: 14.22.27821

Directe download-URL:
https download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe


Wijzigingslogboek:
26 oktober 2021 — Bijgewerkt om de bevindingen verder te verduidelijken op 21 oktober.

21 oktober 2021 — Extra waarschuwingsdetails toegevoegd voor VC++2012 Update 4 (x86) en (x64) GUID’s volgens de bevindingen van Krptodr.
19 augustus 2019 — Een nieuwe versie van de bundelversie 2015-2019 toegevoegd
13 juni 2019 — Een nieuwe sectie toegevoegd voor de 2015-2019 bundelversie 14.21.27702en kleine opmerkingentoegevoegd aan de 2015 en 2017 secties over het overwegen van het gebruik van de nieuwe bundel als alternatief.
14 december 2018 — MSVC2008 voor Service Pack 1’s 9.0.30729.6161update geüpdatet volgens de bevindingen van Jim Wolff
27 november 2018 — Bijgewerkte informatie voor MSVC2017 v. 14.16
12 september 2018 — Versievoorbehoud toegevoegd aan 2012 Update 4 volgens Wai Ha Lee’s bevindingen
24 augustus 2018 — Bijgewerkte versie van 2017 voor 14.15.26706, de bijgewerkte Visual C++-afhankelijkheden verpakt met VS 2017 15.8.1
16 mei 2018 — Bijgewerkte versie van 2017 voor 14.14.26405.0 als het nieuwe C++ 2017-item
8 september 2017 — Bijgewerkte versie van 2017 voor 14.11.25325.0 als het nieuwe Visual C++ 2017-item
7 april 2017 — Bijgewerkte 2017-versie van 14.10.25008.0 als de nieuwe Visual C++ 2017-vermelding
24 oktober 2016 — Bijgewerkte versie-informatie van 2015 voor 14.0.24215.1
18 augustus 2016 — Bijgewerkte versie-informatie van 2015 voor 14.0.24212
27 mei 2016 — Bijgewerkte informatie voor MSVC2015 Update 2

Neem hier contact met me op als een van deze verouderd is.


Antwoord 2, autoriteit 17%

Probeer

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

als uitgangspunt. Ik zal dit gebruiken als controle voor het installeren van de VC++ 11 (VS 2012) runtime.


Antwoord 3, autoriteit 16%

U kunt controleren of de waarde Installed1is op deze registerlocatie: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86op 64-bits systemen. In code die zou resulteren in toegang tot de registersleutel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86. Let op de afwezigheid van WOW6432Node.

Op een 32-bits systeem is het register hetzelfde zonder WOW6432Node: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86


Antwoord 4, autoriteit 7%

Er is geen installcheck-element in het bootstrapper-pakketmanifest dat bij Visual C++ wordt geleverd. Denk dat Microsoft altijd wil installeren als je dit als voorwaarde instelt.

Natuurlijk kun je nog steeds MsiQueryProductState bellen om te controleren of het VC redist-pakket is geïnstalleerd via MSI. De pakketcode kan worden gevonden door

uit te voeren.

wmic product get

op de opdrachtregel, of als je al op wmic:root\cli bent, voer

. uit

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

Antwoord 5, autoriteit 5%

Het antwoord op deze simpele vraag is helaas niet eenvoudig, maar werkt in 100% van alle systemen en is zelfs uitbreidbaar naar de vele .net-frameworks.

De complexiteit komt voort uit het feit dat er veel VC-runtimerevisies zijn (en waren) die ertoe zouden kunnen leiden dat hoewel VC10-runtimes waren geïnstalleerd, hun buildnummer niet recent genoeg was, zodat uw EXE niet zou starten tenzij u ook installeerde de zeer exacte runtimes die u nodig had of een van de nieuwere runtimes waarmee deze en eerdere versies voor dezelfde hoofdversie ermee kunnen werken (de zij-aan-zij-hel).
Als u een 64-bits EXE hebt, moet u ook op beide controleren, de 32- EN 64-bits runtimes.

Dat gezegd hebbende, de enige betrouwbare manier om te bepalen of de runtimes voor uw EXE zijn geïnstalleerd is door te proberen de EXE uit te voeren– of een andere EXE die is gebouwd met dezelfde instellingen als uw hoofd-EXE en wiens enige doel is om te doen – niets. Gewoon uitvoeren (wat betekent dat de runtimes zijn geïnstalleerd) of niet starten (wanneer niet geïnstalleerd).

Ik deed het volgende voor een installatieprogramma waarvoor de VC10 32- en 64-bits runtimes moesten zijn geïnstalleerd: Het installatieprogramma probeert alle dummy-EXE’s te starten en als dit lukt, wordt de bijbehorende runtime als geïnstalleerd beschouwd. Dit lost ook het 32/64 bit-scenario op.

Dit werkt trouwens ook om te bepalen of het juiste .net-framework is geïnstalleerd, wat erg lastig is in Windows 8 en 10, aangezien de downloadbare ingebouwde .net 3.5-ondersteuning ook de .net-versies 3.0 en 2.0 – hier zijn geen registervermeldingen voor.
(En erger nog, u kunt hier niet eens de standaard framework-installatieprogramma’s gebruiken, u moetde ingebouwde ondersteuning gebruiken en deze downloaden via Windows, of uw app opnieuw opbouwen met .net 4, maar dat is een ander verhaal).

De C++ dummy EXE kan worden gebouwd met behulp van een project met de volgende code (en een andere in een 64-bits configuratie indien nodig):

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

Vergeet niet om de eigenschappen van het project Gebruik van MFCin te stellen op MFC gebruiken in een gedeelde DLL.
De uitvoerbare bestanden zullen ongeveer 4 KB groot zijn – een kleine prijs om te betalen voor een zeker resultaat.

Om uw gebruikers een prettige installatie-ervaring te bieden, kunt u het volgende doen (voorbeeldcode is voor NSIS):

Function TryLaunchApplication
  Pop $1 ; pathname
  nsExec::Exec $1
  Pop $0
  ${If} $0 == "error"
  ${OrIf} $0 != 0
    Push 0
  ${Else}
    Push 1
  ${EndIf}
FunctionEnd

en noem het in een functie, b.v. 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

Start vervolgens de runtime-controle, b.v. bij het verlaten van de Welkom-pagina en het resultaat in de cache, zodat u niet elke keer opnieuw hoeft te controleren wanneer de gebruiker op de knop “Terug” en “Volgende” klikt.

Maak vervolgens een alleen-lezen sectie in de installatiestructuur en selecteer deze vooraf of deselecteer deze op de a-functie die wordt uitgevoerd voordat de pagina Componentenwordt weergegeven.

Dit zorgt ervoor dat de installatie van elk ontbrekend runtime-onderdeel verplicht is en wordt overgeslagen als het al aanwezig is.


Antwoord 6, autoriteit 5%

Sinds Visual Studio 2010 en later gestopt is met het gebruik van WinSxS, kan het voldoende zijn om te controleren op %windir%\system32\msvcr110.dll. Als u wilt controleren of u een voldoende nieuwe versie heeft, kunt u controleren of de bestandsversie 11.0.50727.1 (VS2012 RTM) of 11.0.51106.1 (VS2012 Update 1) is.


Antwoord 7, autoriteit 3%

Ik kwam deze vraag tegen op zoek naar een antwoord in de context van het controleren op de herdistribueerbare Visual C++ als onderdeel van een MSI-installatieprogramma gemaakt door WiX.

Ik vond het niet leuk hoe de GUID veranderde met versie en besturingssysteem, dus maakte ik uiteindelijk een aangepaste actie geschreven in C# om te controleren op de herdistribueerbare Visual C++.

Alles hieronder is specifiek voor Visual C++ 2015 Redistributable (x64), maar het kan eenvoudig worden aangepast voor elke versie.

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;
        }
    }
}

Vervolgens in het wxs-bestand

<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>

Bewerken
Ik werk dit antwoord bij met wat basisinformatie over het maken en gebruiken van een aangepaste actie.

Om de aangepaste actie in Visual Studio 2017 te maken met de WiX Toolset Visual Studio 2017-extensie geïnstalleerd, heb ik de projectsjabloon gebruikt om een ​​aangepaste actie te maken (C# Custom Action Project voor WiX v3).

Ik heb het gegenereerde project gecontroleerd en het leek erop dat de wijzigingen aan het begin van dit artikel al waren vermeld: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Manageddus Ik pakte dat artikel op in de sectie Adding Custom Action to the Installeren volgde het met enkele aanpassingen.

Een ander ding dat ik deed, was de versie van het .NET-framework waartegen het project is gebouwd, wijzigen in 3.5.

Ik vond het niet echt nuttig, maar je kunt ook zien http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html


Antwoord 8, autoriteit 2%

Voor mij werkte deze locatie:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\Servicing\11.0\RuntimeMinimum\Version

Controleer welke versie je hebt nadat je het pakket hebt geïnstalleerd en gebruik dat als voorwaarde in je installatieprogramma. (de mijne is ingesteld op 11.0.50727 na installatie van VCred).


Antwoord 9, autoriteit 2%

Ga gewoon naar Configuratiescherm > Programma’s en functies, en ze worden daar allemaal weergegeven.

Ik ben geen expert en dit antwoord is vrij eenvoudig vergeleken met wat mensen antwoorden (controleer het register), dus ik weet niet zeker of dit het juiste antwoord is, maar het werkte voor mij.


Antwoord 10, autoriteit 2%

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

Antwoord 11, autoriteit 2%

Het is me gelukt om dit te doen met InnoSetup.

Ik heb het bestaan ​​van de registersleutel gecontroleerd:

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

Als het verwijderd is, bestaat het niet. Indien geïnstalleerd, bestaat het.

Trouwens, het kan ook in de Wow6432Node zijn:

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


Antwoord 12, autoriteit 2%

De installatiestatus van het product controleren via MsiQueryProductStateis vrijwel gelijk aan het rechtstreeks controleren van het register, maar je hebt nog steeds de GUID nodig voor de Productcode.

Zoals elders vermeld, is een nadeel van deze benaderingen dat elke update zijn eigen ProductCode heeft!

Gelukkig biedt MSI een UpgradeCodedie een ‘familie’ van producten identificeert. Je kunt orca gebruiken om een ​​van de MSI’s te openen om deze informatie te extraheren. De UpgradeCode voor de herdistribueerbare versie van VS2015 is bijvoorbeeld {65E5BD06-6392-3027-8C26-853107D3CF1A}

U kunt MsiEnumRelatedProductsom alle product-ID’s voor die upgradecode te krijgen. In de praktijk, aangezien elke redist-update de vorige vervangt, levert dit slechts één ProductCode op – zoals {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}voor VS2015 Update 2 x86.

U kunt de versie dan hoe dan ook controleren via MsiGetProductInfo(productCode, INSTALLPROPERTY_VERSIONSTRING, …) of vergelijkbare functies om te vergelijken met de versie die u wilt, bijvoorbeeld om te controleren op een equivalente of latere versie.

Houd er rekening mee dat u binnen een C++-toepassing ook _VC_CRT_MAJOR_VERSION, _VC_CRT_MINOR_VERSION, _VC_CRT_BUILD_VERSIONkunt gebruiken als u #include <crtversion.h>— op deze manier kunt u bepalen met welke CRT-versie uw binaire bestand is gebouwd.


Antwoord 13, autoriteit 2%

Deze PowerShell-code zou het moeten doen

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize

Antwoord 14

Ik had hetzelfde nodig, en hoewel AFAIK dit niet programmatisch kan doen, werkte het voor mij.

Ik ging net naar Start –> Verwijder een programma en scrolde naar beneden totdat ik de herdistribueerbare VC++ vond, die een versienummer bevat. Googlen naar het versienummer, vertelde me dat het bij VS2012 SP1 hoort.


Antwoord 15

Oude vraag, maar hier is de aanpak die we sinds Visual Studio 2005 met succes hebben gebruikt. Ik heb het net ook getest met Visual Studio 2012 Update 4 (aangezien we eindelijk onze software updaten van 2010 naar 2012).

Aangezien de Visual C++ Redistributable-pakketten hun de-installatieprogramma met Windows registreren (zodat het wordt weergegeven in de “Programma’s en onderdelen”-lijst van het Configuratiescherm), controleren we eenvoudig de weergavenaam van de de-installatiesleutel in het register.

Hier is de relevante NSIS-code:

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:

Merk op dat aangezien ons installatieprogramma een 32-bits exe is, Windows bepaalt of de registersleutel zich daadwerkelijk in de gevirtualiseerde Wow6432Node bevindt in plaats van op de bovenstaande locatie, zodat de bovenstaande code werkt op zowel 64-bits als 32-bits Windows-installaties zonder dat beide sleutels expliciet hoeven te worden gecontroleerd .

Houd er ook rekening mee dat om de bovenstaande code bij te werken naar een andere versie van de VC++ Redist, je gewoon de GUID in het registersleutelpad en de weergavenaam moet wijzigen in wat je maar nodig hebt.

Hoewel dit misschien niet de aanbevolen methode is, heeft het de afgelopen 10 jaar op meer dan 10.000 machines gewerkt met alle soorten Windows vanaf XP/XP64 tot en met Windows 10 met gebruikmaking van redisten voor 2005, 2010, 2010sp1 en nu 2012u4.


Antwoord 16

Ik zou de waarde Installedvan

. controleren

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

  • waar de GUID van VC++ 2012 (x86){33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Nodezal al dan niet aanwezig zijn, afhankelijk van het VC++ redist-product

Antwoord 17

Wat de meeste mensen missen, is de vereiste /reg:32om de sleutel op Windows x64 te controleren.

Zie Microsoft Help-artikelover dit onderwerp.

Hier is een script dat laat zien hoe u correct controleert op Visual C++ Redistributable voor Visual Studio 2012 Update 4.

@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

Antwoord 18

De powershell-scriptoplossing:

Op basis van de informatie in het antwoord van @kayleeFrye_onDeck

Ik heb een powershell-script gemaakt dat de versies controleert en installeert die de gebruiker opgeeft, ik heb er geen uitgebreide tests mee gedaan, maar voor mijn eigen CI-scenario (Continuous Integration) werkt het perfect.

Het volledige script en de informatie op github

De aanpak die ik gebruikte was gebaseerd op het controleren van de regkeys op basis van de hier verstrekte informatie. Het volgende is de essentie van wat het script doet:

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
    }
}

Het controleren/downloaden/stil installeren op basis van $redistInfodie de gecompileerde informatie van kayleeFrye_onDeck’s bevat.

$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
}

Het volledige script en meer informatie is te vinden op github

Iedereen is welkom om bij te dragen, als ik tijd heb zal ik het script uitgebreider testen en blijven proberen nieuwe pakketten toe te voegen, aangezien hier informatie wordt toegevoegd.


Antwoord 19

Het is moeilijk om alle registerwaarden voor VC 2012 te krijgen, dus ik heb een kleine functie geschreven die alle afhankelijkheden zal doorlopen en overeenkomen met de opgegeven versie.

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;
}

Afhankelijkheden:

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

Antwoord 20

Ik gebruik deze oneliner voor PowerShell in Server 2019 en Windows 10. Ik weet het niet
hoe achterwaarts compatibel dit is.

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

Antwoord 21

u kunt in het register zoeken. Eigenlijk heb ik geen vs2012, maar ik heb vs2010.

Er zijn 3 verschillende (maar zeer vergelijkbare) registersleutels voor elk van de 3 platformpakketten. Elke sleutel heeft een DWORD-waarde genaamd “Geïnstalleerd” met een waarde van 1.

  • HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86

  • HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x64

  • HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\ia64

Je kunt daarvoor de registerfunctie gebruiken……

Other episodes