Comment détecter si je dois installer VCRedist?
j'ai une question très similaire à celui-ci mais la réponse ne fonctionne pas pour moi.
logiciel pour lequel je maintiens la configuration dépend de VC++ 2008 (SP1, précisément), je dois donc trouver une solution pour installer VCRedist si pas encore installé. Je comprends que la bonne façon serait de construire msi avec des modules de fusion, mais ce n'est pas sur mes mains.
la réponse à la double question à laquelle je fais référence (celle acceptée) ne fonctionne pas pour moi parce que chaque version minuscule (par exemple 9.0.30729.01 vs 9.0.30729.17) a des GUIDs appropriés, que je ne suis pas en mesure de deviner ou de prédire pour les versions futures. En outre, je pense que cela ne détecterait pas Visual Studios et donc installer inutilement le paquet VCRedist quand il est déjà sur une machine de développeurs. Je ne veux déranger personne avec ça, certainement pas quelqu'un qui a déjà installé un DevStudio.
maintenant une autre réponse dit que je devrais regarder dans le WinSxs-dossier comme $WINDIRWinSxSx86_Microsoft.VC80.CRT_
mais cela ne m'aide pas (encore) à impliquer SP1, ou y a-t-il quelque chose que je manque à ce point ? Y a-t-il une table avec les numéros de version interne et "externe", donc je pourrais sous-entendre un certain numéro de version mineure ?
je ne peux pas croire qu'il n'y a rien fourni par Microsoft pour ce scénario, mais la recherche de la interwebs depuis déjà bien trop longtemps maintenant me ramène au bon vieux :)
4 réponses
vous pouvez prendre l'approche recommandée pour installer directx: toujours exécuter le redistribuable. Comme il est nécessaire et que vous l'expédiez déjà, il n'y a aucun mal à le faire fonctionner même s'il est déjà installé.
Pour Visual Studio C++ 2010, les choses se sont un peu plus facile .
Contrairement aux paquets redistribuables Visual C++ 2005 et 2008, il existe des clés de Registre qui peuvent être utilisées pour détecter la présence du paquet redistribuable Visual C++ 2010.
Visual C++ 2010 redistribuable package detection registry values""
Visual C++ 2010 Redistribuable Package (x86)
[HKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft\VisualStudio\10.0\VC\VCRedist\x86] Installé = 1 (REG_DWORD)
Visual C++ 2010 Redistribuable Package (x64)
[HKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft\VisualStudio\10.0\VC\VCRedist\x64] Installé = 1 (REG_DWORD)
Visual C++ 2010 Redistribuable Package (ia64)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\ia64] Installé = 1 (REG_DWORD)
Note : vous aurez besoin de vérifier sous Wow6432Node sur un OS 64 bits. (HKLM\Software\Wow6432Node\Microsoft....)
si vous aimez l'ancienne version, voici les GUIDs
Visual C++ 2010 redistribuable package product codes""
- Visual C++ 2010 Paquet redistribuable (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
- Visual C++ 2010 Redistribuable Package (x64)-{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
- Visual C++ 2010 Redistribuable Package (ia64)-{C1A35166-4301-38E9-BA67-02823AD72A1B}
Visual C++ 2010 SP1 redistribuable package product codes
- Visual C++ 2010 SP1 redistribuable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
- Visual C++ 2010 SP1 redistribuable Package (x64) - {1d8e6291-B0D5-35EC-8441-6616F567A0F7}
- Visual C++ 2010 SP1 redistribuable Package (ia64)-{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
ressemble à Il ya une autre solution proposé par un développeur de Microsoft, en utilisant MSIQUERYPRODUCTSTATE API , hélas également compter sur les GUIDs.
Update : le code a été activé hier et semble fonctionner correctement. Voici ce qu'est avoir accompli: Il est vérifié pour la dernière connue à me GUID ET le path2-où-il-est supposé être installé. Si les deux échouent, il est installé. Cela semble beau travail.
de plus, il est installé avec les arguments de ligne de commande" /qb "qui signifie"sans surveillance mais pas invisible". Voir cet autre billet de blog à propos de ces params.
FWIW, GUIDs for 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
$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*
je " open source un projet Visual C++ sur Github qui vérifie pour VC++ redistributable Dll et les a mis à disposition sous la licence Apache 2.0.
Il dispose de trois méthodes différentes pour vérifier la disponibilité des durées D'exécution VC++9 et VC++10:
- Checks the Msiqueryproduitstate APIs;
- inspecter le contenu du dossier WinSxS pour s'assurer que les répertoires de produits correspondent; et
- vérifie le répertoire de travail courant pour toutes les versions locales des durées D'exécution VC++9 et VC++10 (et inspecte leur contenu.)
voici un échantillon de ce que l'utilisation 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;
j'ai autorisé le projet crt-detector sous Apache 2.0, donc n'hésitez pas à l'utiliser dans vos propres applications.