Question

J'ai une question très semblable à href="https://stackoverflow.com/questions/203195/how-to-detect-vc-2008-redistributable"> mais la réponse ne fonctionne pas pour moi.

Software Je suis maintenant la configuration pour dépend de VC ++ 2008 (SP1, précisément), donc je dois trouver une solution pour installer VCRedist si pas encore installé. Je comprends la façon correcte serait de construire msi avec des modules de fusion, mais pas sur mes mains.

La réponse de la double question que je me réfère à (l'un acceptée) ne fonctionne pas pour moi parce que chaque petit communiqué (par exemple 9.0.30729.01 vs 9.0.30729.17) a GUIDs propres, que je ne suis pas en mesure de deviner ou prédire pour les versions futures. De plus, je pense que ce ne détecterait pas Visual Studios et ainsi installer inutilement le paquet VCRedist quand il est déjà sur une machine de développeurs. Je ne veux pas à personne de bug avec cela, certainement pas quelqu'un qui a déjà un DevStudio installé.

Maintenant, une autre réponse dit que je devrais regarder dans le WinSxS-dossier comme $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_, mais cela ne veut pas (encore) aide-moi à laisser entendre SP1, ou est-ce que je suis absent à ce moment? Y at-il une table quelque part avec les numéros internes et version « externes », pour que je puisse impliquer un certain nombre de version mineure?

Je ne peux pas croire qu'il n'y a rien fourni par Microsoft pour ce scénario, mais la recherche interwebs pour déjà beaucoup trop longtemps me amène maintenant à un bon vieux SO:)

Était-ce utile?

La solution

Vous pouvez prendre l'approche recommandée pour l'installation directx: toujours exécuter le redistribuable. Comme il est nécessaire et vous expédiez déjà il n'y a pas de mal à courir même si elle est déjà installé.

Autres conseils

Pour Visual Studio C ++ 2010, les choses ont un peu plus facile .

  

Contrairement aux Visual C ++ 2005 et 2008 packages redistribuables, il y a des clés de registre qui peuvent être utilisés pour détecter la présence de Visual C ++ 2010 package redistribuable.

     

Visual C ++ 2010 les valeurs de registre de détection de package redistribuable

     

Visual C ++ 2010 Redistributable Package (x86)

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86]   Installé = 1 (REG_DWORD)

     

Visual C ++ 2010 Redistributable Package (x64)

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64]   Installé = 1 (REG_DWORD)

     

Visual C ++ 2010 Redistributable Package (ia64)

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64]   Installé = 1 (REG_DWORD)

Remarque : Vous devrez vérifier sous Wow6432Node sur un système d'exploitation 64 bits. (HKLM \ Software \ Wow6432Node \ Microsoft ....)

Si vous aimez l'ancienne version, voici les GUIDs

Visual C ++ 2010 codes produits package redistribuable

  • Visual C ++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C ++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C ++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Visual C ++ 2010 SP1 codes de produit package redistribuable

  • Visual C ++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Visual C ++ 2010 SP1 Redistributable Package (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Visual C ++ 2010 SP1 Redistributable Package (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}

On dirait qu'il est une autre solution proposée par Microsoft-développeur, en utilisant MsiQueryProductState API , hélas aussi compter sur les GUIDs .

Mise à jour : Le code a été mis en veille et semble fonctionner très bien. Voici ce qui se fait beeing: Il est vérifié pour la dernière à me connu GUID ET le path² à où-il-est-censé-être à installé. Si les deux échoue, il est installé. Cela semble fonctionner très bien.

En outre, il est installé avec les arguments de ligne de commande « / qb » qui signifie « sans surveillance mais pas invisible ». Voir cet autre billet de blog sur ces params.

FWIW, GUID pour Microsoft Visual C ++ 2008 / vc90 SP1 redistribuable - x86 9.0.30729

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

² Le chemin: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

un projet Visual C ++ sur Github qui vérifie les DLL redistribuables VC spécifiquement et rendu disponible sous la licence Apache 2.0.

Il dispose de trois méthodes différentes pour vérifier la disponibilité de 10 runtimes de VC ++ 9 et VC:

  1. Vérifie les API MsiQueryProductState;
  2. Vérifier le contenu du dossier WinSxS pour faire correspondre les répertoires de produits; et
  3. Vérifie le répertoire de travail courant pour toutes les versions locales du VC ++ 9 et 10 runtimes VC (et inspecte leur contenu.)

Voici un exemple de ce que l'utiliser ressemble réellement:

 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;

crt-détecteur projet sous Apache 2.0, ne hésitez pas à l'utiliser dans vos propres applications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top