2010-03-18 3 views
0

Je développe un logiciel qui utilise 2 bibliothèques. Ces deux bibliothèques utilisent VS2005 et les deux ont besoin d'un paquet redist VS2005. Cependant, leur paquet redist est dans une version différente. Donc, j'ai plusieurs questions sur l'installation des redists.Microsoft Redistributable package

1) Puis-je simplement installer la nouvelle version sans problème? 2) Si j'installe ces deux redists, comment Windows sait quelle bibliothèque utilise quelle redist?

Merci

Répondre

3

A partir de XP, DLL sont (ou peuvent être) installés dans le cache côte à côté de Windows (en fait, insister sur le fait de la VS2005 DLL d'être trouvée dans le cache côte à côte; sinon ils refusent d'être exécutés). Dans le cache côte-à-côte de Windows (que vous pouvez trouver dans C: \ WINDOWS \ WINSxS), les DLL sont placées dans des sous-dossiers, identifiés par un nom et une version. De cette façon, plusieurs versions des DLL peuvent être installées côte à côte.

Si vous compilez une application Visual Studio, le compilateur indiquera au lieur qu'il doit générer un fichier manifeste. Ce fichier manifeste peut ensuite être lié dans l'exécutable ou la DLL à l'aide de la commande MT.

Ce fichier manifeste contient le même numéro de version que décrit précédemment et Windows utilisera cette information pour localiser les DLL à charger lors du chargement d'un exécutable ou d'une DLL.

Dans votre question, il n'est pas clair si les 2 bibliothèques que vous utilisez sont des DLL ou des LIB. S'il s'agit de DLL, le système décrit ci-dessus est utilisé et vous n'aurez probablement aucun problème. Vous pouvez toujours essayer d'installer la nouvelle version, mais si Windows se plaint, il est également possible d'installer l'ancienne version. Toutefois, si vous utilisez des bibliothèques LIB, vous pourriez avoir des problèmes. Il n'y a aucun moyen d'indiquer les DLL à utiliser par LIB. Votre exécutable peut seulement se référer à une DLL (en fait une version de la DLL), pas deux.

Dans ce cas, vérifiez les stratégies dans le cache côte à côte. Vous le trouverez dans C: \ WINDOWS \ WINSxS \ Policies). Il y aura un sous-dossier par composant et dans les dossiers seront des fichiers de politique. Les fichiers de stratégie peuvent spécifier des redirections. Par conséquent, si votre application attend la version X, la stratégie peut contenir des informations dont la version Y est également autorisée.

C'est un tel exemple d'un fichier de stratégie:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<!-- Copyright © 1981-2001 Microsoft Corporation --> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.ATL" version="8.0.50727.4053" processorArchitecture="amd64 " publicKeyToken="1fc8b3b9a1e18e3b"/> 
    <dependency> 
     <dependentAssembly> 
      <assemblyIdentity type="win32" name="Microsoft.VC80.ATL" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b" /> 
      <bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.4053"/> 
      <bindingRedirect oldVersion="8.0.50727.42-8.0.50727.4053" newVersion="8.0.50727.4053"/> 
     </dependentAssembly> 
    </dependency> 

</assembly> 

Pour plus de détails, regardez sur MSDN pour des informations sur le cache côte à côte et comment utiliser les fichiers manifestes.