IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Trouver la version de MSXML installée


Sujet :

VB 6 et antérieur

  1. #1
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut Trouver la version de MSXML installée
    Avant de céder à la mode des "Trucs & Astuces" ...

    je voudrais voir si ce que vous pouvez me proposer pour connaitre la version (majeure) de MSXML installé sur votre PC..:

    J'ai cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim iVersion As Integer
    On Error Resume Next
    For i = 4 To 9
     
      Set oXML = CreateObject("MSXML2.MXXMLWriter." & i & ".0")
      If Not oXML Is Nothing Then iVersion = i
      Set oXML = Nothing
     Next
     Debug.Print iVersion
    une autre idée ?

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonsoir Bbil,
    vu l'heure, faisons court, éventuellement, ce sera plus long demain :
    sClsid = regGetValue(HKEY_CLASSES_ROOT, "msxml2\clsid", "")
    sTypeLib = regGetValue(HKEY_CLASSES_ROOT, "Clsid\" + sClsid + "\Typelib", "")
    tmp() = regEnumSection(HKEY_CLASSES_ROOT, "Typelib\" + sTypeLib)

    Je te laisse développer GetValue et EnumSection
    Derrière chaque version énumérée, tu trouveras :
    * la description de la librairie comme valeur par defaut,
    * la section Lcid (ou la valeur de révision) qui elle-même contient la section win32 dont la valeur par défaut indique le chemin complet à la librairie.
    Flags indique le type de librairie

    Bonne soirée

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    C'est peut-être ce qui figure entre guillemets dans cette ligne, qui ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oXML = CreateObject("MSXML2.MXXMLWriter." & i & ".0")
    Où l'as-tu trouvée ? (cela aidera)

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    C'est peut-être ce qui figure entre guillemets dans cette ligne, qui ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oXML = CreateObject("MSXML2.MXXMLWriter." & i & ".0")
    Où l'as-tu trouvée ? (cela aidera)

    non pas de problème il marche le code ... je l'ai pas trouvé je l'ai écris...

    mais bon la méthode je suis pas sur qu'elle soit "terrible..." ..


    @Dark .. : ta méthode semble être une solution, j'ai réussi à trouver un "RegGetValue", mais j'ai plus de mal avec le enumSection

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je n'ai rien sous la main pour vérifier, mais (d'instinct) c'est un document que je créerais par createobject et j'irais ensuite contrôler sa propriété .version.
    Il va de soi que cela ne pourrait marcher que si la création d'un document de ce type pouvait se faire sur la machine.

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    C'est ce que j'ai fait au début mais la classe DOMDocument ne possède pas de propriété version .. par contre la classe MXXMLWriter oui c'est pour cela que j'étais parti avec MXXMLWriter sauf que version renvoi toujours 1 (sur mon pc...)

    C'est pour cela que me suis rabattu sur la boucle avec le On Error... histoire de tester l'objet avec le plus grand numéro de version dont la création est possible sans erreur...

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Il semble que l'entête est composée de noeuds et que l'un d'entre eux est ce que tu cherches.
    Pas sûr de moi....
    Regarde quand même :
    http://msdn.microsoft.com/fr-fr/library/hf9hbf87.aspx

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Non ce que je cherche c'est la version de la librairie MSXML pas du fichier XML généré ..

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    As-tu lu ceci :
    http://support.microsoft.com/kb/278674
    (c'est mal traduit, mais on comprend malgré tout...)

    EDIT :
    je suppose par contre que tu as eu l'occasion de lire cette discussion-là :
    http://blogs.msdn.com/xmlteam/archiv...-explorer.aspx

  10. #10
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    De retour avec quelques commentaires :
    l'avantage de la méthode explorant la base de registre
    c'est quelle est universelle et réutilisable avec d'autres librairies.

    Une autre solution consisterait à utiliser une requête WMI ;
    personnellement, je n'aime pas car c'est souvent limité et pire, assez lent,
    sans parler du fait qu'il faut w2000 ou plus.

    PS: Désolé pour regGetValue & regEnumSection, il s'agit de fonctions d'une librairie perso :
    elles utilisent respectivement aux api regGetValueEx et RegEnumKeyEx.
    As-tu eu la curiosité d'explorer ta base de registre comme indiqué ?

  11. #11
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    As-tu lu ceci :
    http://support.microsoft.com/kb/278674
    (c'est mal traduit, mais on comprend malgré tout...)
    .../...
    Ben pour quelqu'un qui aime à se passer le plus possible d'accessoires externes

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Ben pour quelqu'un qui aime à se passer le plus possible d'accessoires externes
    Remarque acceptée (je l'applaudis même), mais :
    1) je n'ai rien trouvé d'autre
    2) plusieurs versions semblent pouvoir être installées "côte à côte"

    Et je reste troublé par l'expression de la question (version "installée" ... quid de celle "utilisée" ?)

  13. #13
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    La méthode indiquée expose toutes les versions installées dans l'énumération des clés :
    il suffira ensuite de choisir la version la plus appropriée.

    ATTENTION - Un oubli :
    dans la base de registre les numéros de version sont exprimées en hexadécimal -
    ce n'est pas important quand le nombre de versions est peu important mais dans le cas contraire
    cela peut être une source d'erreurs :
    exemple : une version notée 75.17 correspond à la version 117.23 - il importe donc de convertir.

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    ....PS: Désolé pour regGetValue & regEnumSection, il s'agit de fonctions d'une librairie perso :
    elles utilisent respectivement aux api regGetValueEx et RegEnumKeyEx.
    As-tu eu la curiosité d'explorer ta base de registre comme indiqué ?
    oui j'ai regardé la base de registre et j'ai aussi commencer à extraire ces numéros de versions avec RegEnumKeyEx .... mais j'ai pas encore eu le temps de finir ... (j'ai pas le code ici... mais de mémoire j'avais un problème sur la première clef ( 2.6) ... qui n'apparaissait pas dans mon énumération ..)



    Et je reste troublé par l'expression de la question (version "installée" ... quid de celle "utilisée" ?)
    ben en fait c'est ni installée ni utilisée c'est utilisable

  15. #15
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par bbil Voir le message
    oui j'ai regardé la base de registre et j'ai aussi commencer à extraire ces numéros de versions avec RegEnumKeyEx .... mais j'ai pas encore eu le temps de finir ... (j'ai pas le code ici... mais de mémoire j'avais un problème sur la première clef ( 2.6) ... qui n'apparaissait pas dans mon énumération ..)
    Bad code or bad install ?

    Citation Envoyé par bbil Voir le message
    ben en fait c'est ni installée ni utilisée c'est utilisable
    +1

  16. #16
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Je viens de tester la méthode à DarkVader sur un PC Vista Pro ..
    et la problème la clef HKEY_CLASSES_ROOT\msxml2\clsid n'existe pas sur ce poste ..
    Cependant ma méthode fonctionne avec HKEY_CLASSES_ROOT\msxml2.DomDocument\clsid

    pour le code (il reste encore quelques points "bizarres" à étudier ) cela donne dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    Public Const ERROR_NO_MORE_ITEMS = 259&
     
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
    '
    ' Lecture d'une chaine dans base de registre
    '
    Function LitChaine(ByVal hKey As Long, stChemin As String, stCle As String) As String
        Dim temp As Long
        Dim result As Long
        Dim tampon As String
        Dim TailleTampon As Long
     
       If RegOpenKey(hKey, stChemin, result) = 0 Then
           TailleTampon = 255
          tampon = Space(TailleTampon)
          temp = RegQueryValueEx(result, stCle, 0, 0, ByVal tampon, TailleTampon)
          LitChaine = Left$(tampon, TailleTampon - 1)
          RegCloseKey hKey
       End If
    End Function
     
    '
    'Fonction ListeSousClefs
    '
    Function ListeSousClefs(ByVal hKey As Long, stChemin As String) As Collection
        Dim result As Long
        Dim tampon As String
        Dim lIndex As Long
        Dim Ret As Long
        Dim t As New Collection
        If RegOpenKey(hKey, stChemin, result) = 0 Then
                Ret = 255
                tampon = Space(Ret)
                While RegEnumKeyEx(result, lIndex, tampon, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
                    t.Add Left$(tampon, Ret)
                    lIndex = lIndex + 1
                    Ret = 255
                    tampon = Space(Ret)
                Wend
                Set ListeSousClefs = t
                RegCloseKey hKey
     
        Else
           MsgBox "Erreur ouverture " & stChemin
        End If
    End Function
    et dans la form pour l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Command1_Click()
        Dim stClsid As String
        Dim sTypeLib As String
        Dim Tmp
        Dim st
     
        stClsid = LitChaine(HKEY_CLASSES_ROOT, "msxml\clsid", "")
        stClsid = LitChaine(HKEY_CLASSES_ROOT, "MSXML2.DOMDocument\clsid", "")
        sTypeLib = LitChaine(HKEY_CLASSES_ROOT, "Clsid\" & stClsid & "\Typelib", "")
        Set Tmp = ListeSousClefs(HKEY_CLASSES_ROOT, "Typelib\" + sTypeLib)
        For Each st In Tmp
            Debug.Print st
        Next
    End Sub

    encore DarkVader


    PS: je marque pas résolu tout de suite au cas ou quelqu'un ait une meilleure idée...

  17. #17
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    He bien voilà une méthode qui fonctionne quelquesoit la version de windows 8)

    PS: Attention, tu n'as pas refermé ton handle dans listesousclés.

  18. #18
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    ..
    PS: Attention, tu n'as pas refermé ton handle dans listesousclés.
    Corrigé

Discussions similaires

  1. Commande pour trouver la version de Linux
    Par Gogoye dans le forum Administration système
    Réponses: 11
    Dernier message: 12/02/2013, 15h43
  2. Réponses: 1
    Dernier message: 02/03/2006, 15h07
  3. Comment savoir quelle version d'MSXML IE utilise?
    Par trent94 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 17/07/2005, 18h38
  4. [Jacob] gérer deux versions de Word installées
    Par difdaf dans le forum Documents
    Réponses: 2
    Dernier message: 16/07/2004, 18h32
  5. déterminer la version de Winsock installée
    Par BlueX_scf dans le forum Web & réseau
    Réponses: 7
    Dernier message: 24/02/2003, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo