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!
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!
Antworten:
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:
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
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
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
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 . .. "
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
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
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
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.
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}und[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
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.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
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
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.
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%'"
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.
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.
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 .
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
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).
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.

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
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.
Dieser PowerShell-Code sollte den Trick machen
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
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.
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.
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
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.
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;
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 ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...