Frage

Gibt es eine Registry-Einstellung, die ich suchen kann, um zu bestimmen, ob der Visual C ++ verteilbare installiert ist, ob eigenständig oder als Teil von Visual Studio 2008? Ich weiß, dass ich konnte die VC ++ 2008 verteilbar Installer zu starten und lassen Sie es die Erkennung handhaben, aber es wäre sauberer aussehen, wenn ich es überprüfen und nicht die Mühe, die Installer starten, wenn die verteilbare bereits auf dem System ist.

Es ist kein großes Problem, wenn es keine Einstellung zu suchen, da dies nur für den vorläufigen Installateure, die wir für die neue Version unserer Software haben. Wir brauchen es nicht für die neuen Windows Installer-basierten Installateure, die wir auf, dass arbeiten die alten Tech ersetzen und die Mergemodule verwenden.

War es hilfreich?

Lösung

Überprüfen Sie die Registrierung:

  

VC ++ 2008 (SP1):   HKLM \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall \ {3C3D696B-0DB7-3C6D-A356-3DB8CE541918}

oder

  

VC ++ 2008 (original):   HKLM \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall \ {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}

Andere Tipps

Ich glaube nicht, dass jene Lösung helfen kann, wenn Ihr anderes Betriebssystem verwenden! Für die Ex wird MsiQueryProductState immer wieder -1 mit Vista VC8.0

, während -1 für VC8.0 / 8.0 SP1 / 9.0 mit Windows 7! So ist die GUID-Lösung, die Microsoft zur Verfügung gestellt, nicht in allen Fällen funktioniert

so ich denke, ich mit dem% windir% zu stecken gezwungen bin \ winsxs Ansatz und die Suche nach

  
      
  • x86_Microsoft.VC80.CRT *
  •   
  • x86_Microsoft.VC90.CRT *
  •   

Für diejenigen, die für alle GUIDs suchen, hier eine Liste i erstellt:

Visual C ++ 2005 Runtime-Dateien

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}

Visual C ++ 2005 SP1 Runtime-Dateien

* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}

Visual C ++ 2005 SP1 Sicherheitsupdate für ATL-Laufzeitdateien

* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}

Visual C ++ 2008 Runtime-Dateien

* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 

Visual C ++ 2008 SP1 Runtime-Dateien

* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}

Visual C ++ 2008 SP1 Sicherheitsupdate für ATL-Laufzeitdateien

* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

Aktuelle eine für VC2005:

Visual C ++ 2005 Service Pack 1 Redistributable Package MFC-Sicherheitsupdate

* VC 8.0 SP1 MFCLOC Patch (x86) - {710F4C1C-CC18-4C49-8CBF-51240C89A1A2}
* VC 8.0 SP1 MFCLOC Patch (x64) - {AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}
* VC 8.0 SP1 MFCLOC Patch (ia64) - {C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}

8.0.50727.6195

http://www.microsoft. com / downloads / details.aspx? FamilyID = AE2E1A40-7B45-4FE9-A20F-2ED2923ACA62

Schnell und schmutzig:

if (LoadLibrary(L"msvcrt80.dll")!=NULL)
{
  // it is installed
}

Loadlibrary behandelt die Pfade für Sie zu suchen.

sieht aus wie es eine andere Lösung vorgeschlagen von einem Microsoft-Entwickler unter Verwendung von MsiQueryProductState API leider auch unter Berufung auf die GUIDs.

Update : Der Code Live gestern ging und scheint gut zu funktionieren. Hier ist das, was getan wird gerade: Es wird geprüft, für die neueste bekannt-to-me-GUID und die path² to-wo-es-ist-soll-zu-sein-installiert. Wenn beide fehlschlägt, wird es installiert. Dies scheint gut zu funktionieren.

Darüber hinaus ist es mit den Befehlszeilenargumenten „/ qb“ installiert, die „unbeaufsichtigt aber nicht unsichtbar“ bedeutet. Siehe diesen anderen Blog-Post über diese params.

FWIW, GUIDs für Microsoft Visual C ++ 2008 / VC90 SP1 Redistributable - x86 9.0.30729

  • 64bit 30.729,17: 8220EEFE-38CD-377E-8595-13398D740ACE
  • 32bit 30.729,17: 9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32bit 30.729,01: 6AFCA4E1-9B78-3640-8F72-A7BF33448200

² Der Weg: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

Nach $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_*, wenn zum Beispiel, sind Sie für das Visual Studio Überprüfung 2008 verteilbar.

I Open-Source , die für ++ verteilbare DLLs VC prüft speziell und machte sie unter der Apache-2.0-Lizenz zur Verfügung.

Es verfügt über drei verschiedene Methoden zur Überprüfung der Verfügbarkeit von VC ++ 9 und VC ++ 10 Runtimes:

  1. Prüft die MsiQueryProductState APIs;
  2. Überprüfen Sie den Inhalt des Ordners WinSxS für Produktverzeichnisse übereinstimmt; und
  3. Prüft das aktuelle Arbeitsverzeichnis für alle lokalen Versionen der VC ++ 9 und VC ++ 10 Runtimes (und überprüft dessen Inhalt.)

edit: Hier ist ein Beispiel, was mit es tatsächlich aussieht:

 wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
 wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
 wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;

I lizenziert die crt-Detektor Projekt unter Apache 2,0, so fühlen sich frei, es in Ihren eigenen Anwendungen zu nutzen.

Aktualisieren für jemand anderes trifft dieses Problem:

1) Wenn Sie Visual Studio installiert haben, werden die erforderlichen DLLs vorhanden sein, aber das „redist Paket“ nicht, so dass die Registrierungsschlüssel fehlen. (D.h. dies wird eine falsche negative geben). Doch die Installation des redist über die Spitze in dieser Situation ist harmlos.

2) Jede größere Freisetzung des redist (beliebige Kombination von VS2005 / VS2008, x86 / x64 / IA64 und Service Pack: SP1, ATL Sicherheitsupdate) eine andere GUID. Achten Sie darauf, wenn Sie erwarten, Ihre Anwendung auf x86- und x64-PC einsetzen.

3) Wenn Sie Loadlibrary oder einen Scheck für DLL-Dateien verwenden, stellen Sie sicher, dass Sie die richtige Version Ziel. Wenn Sie für „jede“ Kopie msvcrt80.dll aussehen (etc), dann werden Sie nicht in der Lage zu sagen, ob es die Version Ihres Programm wurde verknüpft.

Produktcode für "Microsoft Visual C ++ 2008 Service Pack 1 Redistributable Package MFC-Sicherheitsupdate (x86)" ist {9BE518E6-ECC6-35A9-88E4-87755C07200F}

Sie können unter dem WINDOWS \ WinSxS Verzeichnis für die Dateien überprüfen, um zu sehen, welche Versionen installiert ist. Oft können viele Versionen auf einmal installiert werden, so dass Sie die spezifischen Versionen überprüfen, müssen Sie installiert haben.

Ich mag die GUID-Liste mit den folgenden Werten erweitern:

32bit 30.729,17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32bit 30.729,01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64bit 30.729,17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64bit 30.729,01
{0DF3AE91-E533-3960-8516-B23737F8B7A2}
VC ++ 2008 (sp1)
{3C3D696B-0DB7-3C6D-A356-3DB8CE541918}
VC ++ 2008 (original)
{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
IA64 30.729,01
{22E23C71-C27A-3F30-8849-BB6129E50679}
32bit 30729,4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
Visual Studio 2008 Professional SP1
{D7DAD1E4-45F4-3B2B-899a-EA728167EC4F}
32bit 30.729,01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}

Also bitte entscheiden, ob es eine gute Idee, um die Anwesenheit von vcredist von GUIDs zu überprüfen.

Der sicherste Weg, um den wird mit MsiQueryProductState API mit der GUID der verschiedenen vcredist Versionen.

Es funktioniert!

Viele Grüße.

Gefunden Registrierungseintrag für VC2008 verteilbar. Hier ist meine Lösung:

BOOL IsVC2008RedistInstalled(LPCTSTR pLogFile)
{
    TCHAR szLogEntry[256];
    memset(szLogEntry, '0', sizeof(szLogEntry));
    HKEY hKey;
    LONG lErr;

    TCHAR csid[256];
    _stprintf( csid, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{9A25302D-30C0-39D9-BD6F-21E6EC160475}"));
    lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, csid, 0, KEY_QUERY_VALUE, &hKey);
    if (lErr == ERROR_SUCCESS)
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was installed before.\n"));
    toFile(pLogFile, szLogEntry);
    return TRUE;
    }
    else
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was not installed before. %ld\n"), lErr);
    toFile(pLogFile, szLogEntry);
    return FALSE;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top