Ermitteln Sie, ob Visual C ++ Redistributable für Visual Studio 2012 installiert ist

109

Wie erkenne ich, ob Visual C ++ Redistributable für Visual Studio 2012 installiert ist?

Ich habe es mit Google versucht und niemand hat diese Frage gestellt, Überraschung!

sean717
quelle
1
Warum entfernen Sie diese Abhängigkeit nicht, indem Sie die Laufzeitbibliothek in C ++> Codegenerierung auf Multi-Threaded [Debug] anstelle von Multi-Threaded [Debug] -Dll setzen? Ich habe gerade ein Problem bei der Installation von Runtime zur Laufzeit gelöst, indem ich einfach die Abhängigkeit entfernt habe.
Cem Kalyoncu
Ich fand heraus, wie man Pakete durch Ausprobieren erkennt. Ich wünschte, es gäbe eine magische Kugel, aber wenn ja, habe ich sie noch nicht gefunden. Ich habe unten eine Antwort für einige spezifische Redists, die anscheinend 100% der Zeit funktionieren, um bei den derzeit meisten von ihnen zu helfen .
KayleeFrye_onDeck
3
Bitte erwägen Sie, die akzeptierte Antwort in die von kayleeFrye_onDeck zu ändern. Ich habe ewig nach einer zuverlässigen Methode gesucht und dies scheint die eine zu sein. Ich denke, mit all den anderen unzuverlässigen Antworten wird es vielen Menschen helfen, die richtigen Informationen zu finden
Musefan
Es scheint ein Update für die Laufzeit von Visual Studio 2017 zu geben: 14.10.V25017. Link: go.microsoft.com/fwlink/?LinkId=746572 Können Sie die Registrierungswerte aktualisieren?
Karel Vergauwe

Antworten:

172

Dies hängt davon ab, welche Version Sie verwenden. Diese beiden 2012-Schlüssel haben für mich mit den entsprechenden Versionen zum Herunterladen für Update 4 gut funktioniert. Bitte beachten Sie, dass einige dieser Registrierungsspeicherorte möglicherweise vom Betriebssystem abhängig sind. Ich habe diese Informationen aus einer Windows 10 x64- Box gesammelt . Ich werde einfach alle diese Redist-Versionen und die Registrierungsschlüssel, nach denen ich suche, ausgeben, um die Installation zu erkennen:


Visual C ++ 2005

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

Direkte 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

Direkte 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])

Direkte 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])

Direkte 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

Direkte 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

Direkte 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

Direkte 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

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

Versionsvorbehalt : Laut denErgebnissen vonBenutzer Wai Ha Lee "... haben die mit VC ++ 2012 Update 4 ( 11.0.61030.0) gelieferten 11.0.60610.1Binärdateien eine Version für die ATL- und MFC-Binärdateien und 11.0.51106.1für alles andere, z . B. msvcp110.dll und 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

Direkte 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

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


Visual C ++ 2015

Erwägen Sie die Verwendung des Bundles 2015-2019 als Alternative

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

Direkte 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

Direkte Download-URL: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe


Visual C ++ 2017

Erwägen Sie die Verwendung des Bundles 2015-2019 als Alternative

Vorsichtsmaßnahme : Es wird entweder eine neue Registrierungskonvention für 2017 verwendet oder sie wurde noch nicht abgeschlossen. Wie ich vermute, die obersten Tasten von: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle] und [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]

Änderungen vorbehalten sind oder zumindest unterschiedliche verschachtelte GUIDs haben. Ich werde den Schlüssel auflisten, der mit einer GUID endet.

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

Direkte Download-URL: 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

Direkte Download-URL: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe


Visual C ++ 2019 ( Bundle 2015-2019 )

Vorsichtsmaßnahme : Für Visual C ++ 2019 wird eine weitere neue Registrierungskonvention verwendet. Es scheint auch kein eigenständiges Installationsprogramm für Visual C ++ 2019 zu geben, sondern nur dieses Bundle-Installationsprogramm für Visual C ++ 2015 bis 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  

Direkte 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

Direkte 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

Direkte 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

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


Änderungsprotokoll :
19. August 2019 - Neue Version der Bundle-Version
2015-2019 14.21.27702hinzugefügt 13. Juni 2019 - Ein neuer Abschnitt für die Bundle-Version 2015-2019 wurde hinzugefügt , und den Abschnitten 2015 und 2017 wurden kleine Hinweise zur Berücksichtigung der Verwendung von hinzugefügt das neue Bundle als Alternative.
14. Dezember 2018 - Aktualisiertes MSVC2008 für das 9.0.30729.6161Update von Service Pack 1 gemäß den Ergebnissen von Jim Wolff
27. November 2018 - Aktualisierte Informationen für MSVC2017 v. 14.16
12. September 2018 - Versionsbeschränkung zu 2012 Update 4 gemäß den Ergebnissen von Wai Ha Lee hinzugefügt
24. August, 2018 - Aktualisierte Version 2017 für 14.15.26706, die aktualisierten Visual C ++ - Abhängigkeiten, die mit VS 2017 15.8.1 gepackt wurden
16. Mai 2018 - Aktualisierte Version 2017 für 14.14.26405.0 als neuen C ++ 2017-Eintrag
8. September 2017 - Aktualisierte 2017-Version für 14.11.25325.0 als neuer Visual C ++ 2017-Eintrag
7. April 2017 - Aktualisierte 2017-Version von 14.10 .25008.0 als neuer Visual C ++ 2017-Eintrag
24. Oktober 2016 - Aktualisierte Versionsinformationen für 2015 für 14.0.24215.1
18. August 2016 - Aktualisierte Versionsinformationen für 2015 für 14.0.24212
27. Mai 2016 - Aktualisierte Informationen für MSVC2015 Update 2

Bitte kontaktieren Sie mich hier, wenn eines davon veraltet ist.

kayleeFrye_onDeck
quelle
4
Dies ist perfekt. Dies ist die einzige, die ich gefunden habe und die bei der Installation von Visual Studio oder der Deinstallation der Laufzeit keine Fehlalarme liefert.
AN
2
Die GUID von VS2015 Pre Update 1 lautet {74d0e5db-b326-4dae-a6b2-445b9de1836e}, sodass Sie mit diesem Mechanismus in eine Essiggurke geraten können. Für jedes zukünftige Update! Das Starten des VCRedist vor Update 1 mit installiertem Update 1 hat einen Fehler verursacht. Ich werde also den Registrierungsschlüssel für das VC-Installationsprogramm verwenden. Was scheint in Ordnung zu sein, wenn Sie VCRedist verwenden?
GilesDMiddleton
4
Leider enthält dies nicht VCREDIST 14.0 Update 2 - wie gehen wir mit der Vorwärtskompatibilität um (Erkennung neuer, nachfolgender Versionen derselben Laufzeit)
Shaun Wilson
2
@ManjunathBabu, ich glaube nicht, dass es eine externe Dokumentation zu Registrierungskonventionen für die weiterverteilbaren Visual C ++ - Installationsprogramme gibt. Mir ist gerade aufgefallen, dass sie 2017 tatsächlich etwas zu tun hatten, das einem Schema ähnelte, anstatt nur irgendwo eine andere GUID ohne einen aussagekräftigen übergeordneten Schlüsselnamen zu werfen. Bisher haben sie diese Speicherorte für alle veröffentlichten Installer für 2017 verwendet: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}und[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
kayleeFrye_onDeck
2
Das neue Paket von Visual C ++ 2017 ändert den Registrierungspfad (Version 14.16.27012.6)[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
live2
31

Versuchen

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

als Ausgangspunkt. Ich werde dies als Überprüfung für die Installation der VC ++ 11 (VS 2012) Laufzeit verwenden.

Dave Dawkins
quelle
7
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Install sollte auf 1 gesetzt werden
Alex Spence
3
Für 32-Bit (auch bekannt als x86) befindet sich der Schlüssel bei:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
CodeFox
@kayleeFrye_onDeck hast du gefunden, wie das geht? Ich bin immer noch auf der Suche nach einem zuverlässigen Weg, aber keine der Antworten auf dieser Seite hat für mich funktioniert
AN
Bessere Antwort als die akzeptierte, da sie nicht auf der Paket-UUID
basiert
25

Sie können überprüfen, ob sich der InstalledWert an 1diesem Registrierungsspeicherort befindet: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86auf 64-Bit-Systemen. In Code, der zum Zugriff auf den Registrierungsschlüssel führen würde HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86. Beachten Sie das Fehlen von Wow6432Node.

Auf einem 32-Bit-System ist die Registrierung dieselbe ohne Wow6432Node:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86

Mike de Klerk
quelle
Ich habe einen 32-Bit-Win7-Computer mit der 2012 VC ++ - Laufzeit installiert und habe diesen Registrierungsschlüssel nicht.
BryanJ
Sind Sie sicher, dass Sie nicht über "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC" verfügen? Was hast du?
Mike de Klerk
2
Ich habe, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VCaber ich habe nicht den RuntimesSchlüssel. Ich habe den Schlüssel in Daves Antwort HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0.
BryanJ
@BryanJ Seltsam, dass jedes System so unterschiedlich sein kann ... Vielen Dank für das Hinzufügen dieser nützlichen Informationen
Mike de Klerk
3
Lustige Geschichte und keine wirklichen Informationen von MS. Ich denke, Sie haben die beste Antwort, die ich bisher gefunden habe. Getestet, um den vcredist auf einer relativ frischen VM zu installieren, und dies ist der einzige Schlüssel, den ich danach gefunden habe. Also Daumen hoch von meiner Seite ...
Anhoppe
12

Das mit Visual C ++ gelieferte Bootstrapper-Paketmanifest enthält kein installcheck-Element. Vermutlich möchte Microsoft immer installieren, wenn Sie dies als Voraussetzung festlegen.

Natürlich können Sie weiterhin MsiQueryProductState aufrufen, um zu überprüfen, ob das VC-Redist-Paket über MSI installiert ist. Der Paketcode kann durch Ausführen gefunden werden

wmic product get

Führen Sie in der Befehlszeile oder wenn Sie sich bereits in wmic: root \ cli befinden, aus

product where "Caption like '%C++ 2012%'"
Sheng Jiang 蒋 晟
quelle
10

Die Antwort auf diese einfachen Fragen ist leider nicht einfach, sondern funktioniert in 100% aller Systeme und ist sogar auf die zahlreichen .net-Frameworks erweiterbar.

Die Komplexität ergibt sich aus der Tatsache, dass es viele Revisionen von VC-Laufzeiten gibt (und gab), die dazu führen könnten, dass VC10-Laufzeiten zwar installiert wurden, ihre Build-Nummer jedoch nicht aktuell genug war, sodass Ihre EXE-Datei nur gestartet werden kann, wenn Sie sie ebenfalls installiert haben genaue Laufzeiten, die Sie benötigt haben, oder eine der neueren Laufzeiten, die es dieser und früheren Versionen ermöglichen, dass dieselbe Hauptversion damit ausgeführt wird (die Hölle nebeneinander). Wenn Sie eine 64-Bit-EXE-Datei haben, müssen Sie sowohl die 32- als auch die 64-Bit-Laufzeit überprüfen.

Die einzige zuverlässige Methode, um festzustellen, ob die Laufzeiten für Ihre EXE installiert sind, besteht darin, zu versuchen, die EXE auszuführen - oder eine andere EXE, die mit denselben Einstellungen wie Ihre Haupt-EXE erstellt wurde und deren einziger Zweck darin besteht, nichts zu tun. Einfach ausführen (was bedeutet, dass die Laufzeiten installiert sind) oder nicht ausführen (wenn nicht installiert).

Für ein Installationsprogramm, für das die 32- und 64-Bit-Laufzeiten von VC10 installiert werden mussten, habe ich Folgendes ausgeführt: Das Installationsprogramm versucht, alle Dummy-EXE-Dateien zu starten. Wenn dies erfolgreich ist, wird die entsprechende Laufzeit als installiert betrachtet. Dies löst auch das 32/64-Bit-Szenario.

Dies funktioniert übrigens auch, um festzustellen, ob das richtige .net-Framework installiert ist, was in Windows 8 und 10 sehr schwierig ist, da die herunterladbare integrierte .net 3.5-Unterstützung auch die .net-Versionen 3.0 und 2.0 unterstützt - dort Es gibt keine Registrierungseinträge für diese. (Und schlimmer noch, Sie können hier nicht einmal die Standard-Framework-Installationsprogramme verwenden. Sie müssen die integrierte Unterstützung verwenden und über Windows herunterladen oder Ihre App mit .net 4 neu erstellen, aber das ist eine andere Geschichte.)

Die C ++ - Dummy-EXE-Datei kann mit einem Projekt mit dem folgenden Code erstellt werden (und ggf. mit einem anderen in einer 64-Bit-Konfiguration):

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

Denken Sie daran, die Projekteigenschaften festzulegen. Verwendung von MFC zur Verwendung von MFC in einer gemeinsam genutzten DLL . Die ausführbaren Dateien werden ungefähr 4 KB groß sein - ein kleiner Preis für ein sicheres Ergebnis.

Um Ihren Benutzern eine schöne Installationserfahrung zu bieten, können Sie Folgendes tun (Beispielcode ist für NSIS ):

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

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

und rufen Sie es in einer Funktion auf, zB 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

Starten Sie dann die Laufzeitprüfung, z. B. beim Verlassen der Begrüßungsseite, und speichern Sie das Ergebnis im Cache, damit Sie nicht jedes Mal erneut prüfen müssen, wenn der Benutzer auf die Schaltflächen "Zurück" und "Weiter" klickt.

Erstellen Sie als Nächstes einen schreibgeschützten Abschnitt in der Installationsstruktur und wählen Sie ihn für die Funktion aus, die ausgeführt wird, bevor die Seite Komponenten angezeigt wird.

Dadurch wird sichergestellt, dass die Installation jeder fehlenden Laufzeitkomponente obligatorisch ist und übersprungen wird, wenn sie bereits vorhanden ist.

Michael
quelle
Vielen Dank für den hilfreichen Tipp. Erinnern Sie sich, welcher Projekttyp erstellt werden muss? VS hat eine Vielzahl von ihnen zur Auswahl :-).
Greenoldman
9

Da Visual Studio 2010 und höher WinSxS nicht mehr verwenden, reicht es möglicherweise aus, nur nach% windir% \ system32 \ msvcr110.dll zu suchen. Wenn Sie überprüfen möchten, ob Sie über eine ausreichend neue Version verfügen, können Sie überprüfen, ob die Dateiversion 11.0.50727.1 (VS2012 RTM) oder 11.0.51106.1 (VS2012 Update 1) lautet.

BCran
quelle
+1 das ist einfacher und kinderleichter. Registrierungsschlüssel sind alle in Ordnung und so, aber wenn der Benutzer mit dem System herumgespielt und msvcr110.dll gelöscht hat, ist die Registrierungsprüfung nutzlos. Am besten überprüfen Sie jedoch alle benötigten Komponenten (msvcr110.dll, msvcp110.dll, mfc, ...). Und für Update 3 ist die Version 11.0.60610.1.
Stijn
ok ignoriere das letzte Bit: Anscheinend ist nur das Installationsprogramm 11.0.60610.1, die Version der CRT-DLLs ist immer noch 11.0.51106.1
stijn
ya die .dll ist 11.0.51106.1 obwohl ich vs2012 sp4 installiert habe
Blub
Das wird nicht funktionieren. Ich habe 2005-2015 deinstalliert und habe dort immer noch MSVC-Dateien für 60, 100, 110, 120 und 140.
KayleeFrye_onDeck
Beachten Sie, dass die mit VC ++ 2012 Update 4 ( 11.0.61030.0) gelieferten 11.0.60610.1Binärdateien eine Version für die ATL- und MFC-Binärdateien und 11.0.51106.1für alles andere haben, z. B. msvcp110.dll und msvcr110.dll. Nicht sicher warum. Sie können dies bestätigen (auf den Windows 10-Computern, auf denen ich es getestet habe), indem Sie die Dateien in den CAB-Dateien aufrufen C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86und C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86anschließend überprüfen .
Wai Ha Lee
5

Ich bin auf diese Frage gestoßen und habe nach einer Antwort im Zusammenhang mit der Suche nach Visual C ++ gesucht, das im Rahmen eines von WiX erstellten MSI-Installationsprogramms weiterverteilbar ist.

Mir hat nicht gefallen, wie sich die GUID mit der Version und dem Betriebssystem ändert, und so habe ich eine benutzerdefinierte Aktion erstellt, die in C # geschrieben wurde, um zu überprüfen, ob Visual C ++ weiterverteilbar ist.

Alles unten ist speziell für Visual C ++ 2015 Redistributable (x64), kann jedoch für jede Version problemlos geändert werden.

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

Dann in der wxs-Datei

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

Bearbeiten Ich aktualisiere diese Antwort mit einigen grundlegenden Informationen zum Erstellen und Verwenden einer benutzerdefinierten Aktion.

Um die benutzerdefinierte Aktion in Visual Studio 2017 mit der installierten WiX Toolset Visual Studio 2017-Erweiterung zu erstellen, habe ich die Projektvorlage verwendet, um eine benutzerdefinierte Aktion zu erstellen (C # Benutzerdefiniertes Aktionsprojekt für WiX v3).

Ich habe das generierte Projekt überprüft und es schien bereits die am Anfang dieses Artikels aufgeführten Änderungen zu haben: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed Also habe ich diesen Artikel in der Sektion aufgegriffen Adding Custom Action to the Installerund einige Verbesserungen vorgenommen.

Eine andere Sache, die ich getan habe, war, die Version des .NET Frameworks, für das das Projekt erstellt wurde, auf 3.5 zu ändern.

Ich fand es nicht wirklich nützlich, aber Sie können auch http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html sehen

TJ Rockefeller
quelle
4

Für mich hat dieser Speicherort funktioniert: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version

Überprüfen Sie, welche Version Sie nach der Installation des Pakets haben, und verwenden Sie diese als Bedingung in Ihrem Installationsprogramm. (meins ist nach der Installation von VCred auf 11.0.50727 eingestellt).

Attila
quelle
Diese Antwort ist genau das, wonach wir gesucht haben (im Vergleich zu anderen Antworten hier, bei denen es weniger um die Laufzeit als leider um Visual Studio geht)
Shaun Wilson
Diese Antwort funktioniert nicht, da dieser Schlüssel vorhanden ist, nachdem Sie die Redists deinstalliert haben.
KayleeFrye_onDeck
4

Gehen Sie einfach zu Systemsteuerung> Programme und Funktionen, und alle werden dort aufgelistet.

Ich bin kein Experte und diese Antwort ist ziemlich einfach im Vergleich zu dem, was die Leute beantworten (Registrierung überprüfen), daher bin ich mir nicht sicher, ob es die richtige Antwort ist, aber sie hat den Trick für mich getan.

Programme und Funktionen

Adrian Pauly
quelle
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
Al.Pertro
quelle
3

Ich habe es mit InnoSetup geschafft.

Ich habe die Existenz des Registrierungsschlüssels überprüft:

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

Wenn deinstalliert, existiert es nicht. Wenn installiert, existiert es.

Übrigens könnte es auch im Wow6432Node sein:

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

Fandi Susanto
quelle
Das ist falsch. Schlüssel sind an beiden Speicherorten vorhanden, wenn sie deinstalliert wurden.
KayleeFrye_onDeck
1
@kayleeFrye_onDeck Yep ... Ich muss dir zustimmen. Aber tatsächlich war es erfolgreich, als ich es zum ersten Mal versuchte. Aber vor kurzem ist es wie du gesagt hast. Ich weiß nicht warum es so ist.
Fandi Susanto
3

Das Überprüfen des Installationsstatus für das Produkt über MsiQueryProductState entspricht weitgehend dem direkten Überprüfen der Registrierung, Sie benötigen jedoch weiterhin die GUID für den ProductCode .

Wie an anderer Stelle erwähnt, besteht ein Nachteil dieser Ansätze darin, dass jedes Update seinen eigenen ProductCode hat!

Zum Glück bietet MSI einen UpgradeCode an, der eine Produktfamilie identifiziert. Mit orca können Sie eine der MSIs öffnen, um diese Informationen zu extrahieren. Der UpgradeCode für VS2015 ist beispielsweise weiterverteilbar{65E5BD06-6392-3027-8C26-853107D3CF1A}

Sie können MsiEnumRelatedProducts verwenden , um alle Produkt-IDs für diesen UpgradeCode abzurufen. In der Praxis ergibt dies nur einen ProductCode, da jedes Redist-Update das vorherige ersetzt - beispielsweise {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}für VS2015 Update 2 x86.

Unabhängig davon können Sie dann die Version über MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) oder ähnliche Funktionen überprüfen, um sie mit der gewünschten Version zu vergleichen, z. B. um nach einer gleichwertigen oder späteren Version zu suchen.

Beachten Sie, dass Sie in einer C ++ - Anwendung auch verwenden _VC_CRT_MAJOR_VERSIONkönnen _VC_CRT_MINOR_VERSION, _VC_CRT_BUILD_VERSIONwenn Sie #include <crtversion.h>- auf diese Weise können Sie die CRT-Version berechnen, mit der Ihre Binärdatei erstellt wurde.

adzm
quelle
Wie haben Sie diese Informationen erhalten? Und ist das der UpgradeCode für die x86-Version oder die x64-Version?
Ben Key
Mit Orca können Sie die MSI öffnen und den UpgradeCode extrahieren. Die hier angegebene ist mindestens für x86. Woher ich den Rest der Informationen habe, ist dies so ziemlich die Hauptquelle; Ich konnte online keine anderen Verweise auf diesen Ansatz in Bezug auf die Redist finden, aber das UpgradeCode / Familienmuster ist bei MSI-Installationsprogrammen üblich.
Adzm
Orca ist mir bekannt. Das Problem hat damit zu tun, zu diesem MSI zu gelangen. Ich kenne keine Möglichkeit, direkt darauf zuzugreifen. Der einzige Weg, den ich kenne, besteht darin, ihn irgendwie im Verzeichnis c: \ Windows \ Installer zu finden. Ich habe über 1.000 Dateien in diesem Verzeichnis. Die Dateien werden zufällig benannt. Die einzige Möglichkeit, festzustellen, welches MSI korrekt ist, besteht in der Beschreibung. Dies beinhaltet das Drücken von Alt + Eingabetaste für 1.000 Dateien im Explorer oder das Verwenden eines Tools zum Speichern der Beschreibungen von 1.000 Dateien.
Ben Key
Ahh ich verstehe. Sie können auch die Registrierung durchsuchen, um den Pfad oder sogar den Upgrade-Code zu finden, wenn Sie den Produktcode unter HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes kennen. Möglicherweise müssen Sie jedoch WMIC (oder einen anderen programmgesteuerten Zugriff auf die MSI-Datenbank) verwenden, um den Rest herauszufinden. wmic product get / format: csv gibt eine CSV aus, nach der Sie suchen können - sie enthält die msi-Pfade in den zurückgegebenen Werten. Sie könnten sicher ein besseres Skript schreiben, aber das sollte ausreichen, um Sie auf den Weg zu bringen.
Adzm
3

Dieser PowerShell-Code sollte den Trick machen

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table AutoSize
Ernie C.
quelle
Da die Hardcodierung einer Reihe von Produktcodes nicht funktionieren würde, führen wir auch die Registrierung auf, indem wir den "Produktnamen" jedes Eintrags mit einem regulären Ausdruck überprüfen. Anschließend überprüfen wir VersionMajor / VersionMinor (was alles ist, was uns wirklich interessiert). Dies hat den Wert Wir können einen einzelnen Build erstellen und wissen, dass er über die Lebensdauer einer bestimmten vcredist-Version weiter funktioniert. Die Absicht hier ist genau richtig, erfordert jedoch möglicherweise eine Transliteration für Toolsets wie NSIS- oder WinAPI-basierte Installationsprogramme.
Shaun Wilson
2

Ich brauchte das Gleiche, und obwohl AFAIK dies nicht programmgesteuert tun kann, hat es bei mir funktioniert.

Ich ging einfach zu Start -> Deinstallieren eines Programms und scrollte nach unten, bis ich die weitervertreibbare VC ++ fand, die eine Versionsnummer enthält. Als ich die Versionsnummer googelte, sagte ich, dass sie zu VS2012 SP1 gehört.

bavaza
quelle
2

Alte Frage, aber hier ist der Ansatz, den wir seit Visual Studio 2005 mit Erfolg verwendet haben. Ich habe es gerade auch mit Visual Studio 2012 Update 4 getestet (da wir unsere Software endlich von 2010 auf 2012 aktualisieren).

Da die Visual C ++ Redistributable-Pakete ihr Deinstallationsprogramm bei Windows registrieren (so dass es in der Liste "Programme und Funktionen" der Systemsteuerung angezeigt wird), suchen wir einfach in der Registrierung nach dem Anzeigenamen des Deinstallationsschlüssels.

Hier ist der 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:

Da es sich bei unserem Installationsprogramm um eine 32-Bit-Exe handelt, ermittelt Windows anstelle des oben genannten Speicherorts, ob sich der Registrierungsschlüssel tatsächlich im virtualisierten Wow6432Node befindet, sodass der obige Code sowohl bei 64-Bit- als auch bei 32-Bit-Windows-Installationen funktioniert, ohne dass beide Schlüssel explizit überprüft werden müssen.

Beachten Sie außerdem, dass Sie zum Aktualisieren des obigen Codes auf eine andere Version von VC ++ Redist einfach die GUID im Registrierungsschlüsselpfad und den Anzeigenamen nach Bedarf ändern müssen.

Obwohl dies möglicherweise nicht die empfohlene Methode ist, hat es in den letzten 10 Jahren auf über 10.000 Computern funktioniert, auf denen alle Windows-Versionen von XP / XP64 bis Windows 10 mit Redists für 2005, 2010, 2010sp1 und jetzt 2012u4 ausgeführt wurden.

kinar
quelle
1

Ich würde den InstalledWert von überprüfen

HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID} Schlüssel

  • wo GUID von VC++ 2012 (x86)ist{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Nodewird je nach VC++ redistProdukt vorhanden sein oder nicht
Lerner
quelle
0

Was die meisten Leute vermissen, ist die Notwendigkeit /reg:32, unter Windows x64 nach dem Schlüssel zu suchen.

Siehe Microsoft-Hilfeartikel zu diesem Thema.

Hier ist ein Skript, das zeigt, wie Sie korrekt nach Visual C ++ Redistributable für Visual Studio 2012 Update 4 suchen.

@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
war59312
quelle
0

Die Powershell-Skriptlösung:

Basierend auf den Informationen in der Antwort von @kayleeFrye_onDeck

Ich habe ein Powershell-Skript erstellt, das die vom Benutzer angegebenen Versionen überprüft und installiert. Ich habe keine umfangreichen Tests damit durchgeführt, aber für mein eigenes CI-Szenario (Continuous Integration) funktioniert es perfekt.

Das vollständige Skript und Informationen zu Github

Der Ansatz, den ich verwendet habe, basierte auf der Überprüfung der Regkeys anhand der hier bereitgestellten Informationen. Das Folgende ist der Kern dessen, was das Skript tut:

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

Das Überprüfen / Herunterladen / unbeaufsichtigte Installieren basierend darauf $redistInfoenthält die kompilierten Informationen von kayleeFrye_onDeck's.

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

Das vollständige Skript und weitere Informationen finden Sie auf github

Jeder kann gerne einen Beitrag leisten. Wenn ich Zeit habe, werde ich das Skript ausführlicher testen und weiterhin versuchen, neue Pakete hinzuzufügen, wenn hier Informationen hinzugefügt werden.

Jim Wolff
quelle
0

Es ist schwierig, alle Registrierungswerte für VC 2012 abzurufen. Daher habe ich eine kleine Funktion geschrieben, die alle Abhängigkeiten durchläuft und mit der angegebenen Version übereinstimmt.

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

Abhängigkeiten:

using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;
ssamko
quelle
-5

Sie können in der Registrierung suchen. Eigentlich habe ich nicht vs2012, aber ich habe vs2010.

Für jedes der 3 Plattformpakete gibt es 3 verschiedene (aber sehr ähnliche) Registrierungsschlüssel. Jeder Schlüssel hat einen DWORD-Wert namens "Installed" mit dem Wert 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

Sie können die Registrierungsfunktion dafür verwenden ......

vikky
quelle
1
Ich habe das in der ersten Zeile geschrieben "Dass ich VS2012 nicht habe". Also keine Notwendigkeit, dies zu kommentieren ............. Und dies war nur für vs2010
vikky
1
Sie haben das bemerkt, aber es schien, als würden Sie vorschlagen, dass Ihre Lösung auch für VS2012 funktioniert, da dies die Frage des OP war (konnte dies jedoch nicht überprüfen, da Sie kein VS2012 haben). Ich habe lediglich festgestellt, dass dieser Ansatz mit VS2012 tatsächlich nicht funktioniert, da ich ihn ausgecheckt habe.
StellarEleven
Warum meine Antwort ablehnen ... Ich habe klar geschrieben, dass es für vs2012 ist ... und dies wird vom Benutzer als Antwort akzeptiert ... also warum ???????????
Vikky
1
Es scheint , dass dieser Wert mit einem x64 - Bit - OS befindet sichHKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...
bas
1
VS 2012-Schlüssel sind HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ____ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ___
Adam L