[R] Retrouver le chemin d'enregistrement d'une DLL

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

[R] Retrouver le chemin d'enregistrement d'une DLL

#1

Message par sksbir »

Bonjour

Je cherche à savoir si une DLL est enregistrée.

Pour enregistrer une DLL, il suffit d'utiliser regsvr32.exe <fichier DLL>
Le hic, c'est que regsvr32.exe n'a pas d'option du genre "query" pour savoir si l'enregistrement est déja effectué ou pas.

J'ai trouvé cette page et cette page qui donnent des exemple de programme capables de faire ça, mais je ne vois pas trop comment ça fonctionne.

Par ailleurs, j'ai trouvé cet exemple sur le forum autoit anglais, mais il faut installer une autre DLL pour que ça fonctionne , ou alors selon un autre exemple dans la meme page, utiliser une fonction _DLLRegisterServer qui s'avère être inexistante dans la doc standard d'autoit...

Si quelqu'un pouvait me donner une piste, ça serait sympa. Merci
Modifié en dernier par sksbir le jeu. 09 sept. 2010 11:46, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Retrouver le chemin d'enregistrement d'une DLL

#2

Message par Tlem »

Si vous ne voulez pas passer par un utilitaire tiers, je pense que la solution sera de lister toutes les DLL enregistrées dans la base de registre dans les sous clés de HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID

Par exemple, pour la DLL dao32.dll, il me suffit de lire la valeur de chaine par défaut de la clé HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000010-0000-0010-8000-00AA006D2EA4}\InprocServer32 et le tour est joué.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Retrouver le chemin d'enregistrement d'une DLL

#3

Message par sksbir »

Merci pour la réponse rapide :)
J'avais déjà vu cette proposition en parcourant internet.

Sur mon PC, cette entrée de registre pointe sur DAO350.DLL

Par ailleurs, si je recopie cette DLL par exemple sur D:\tmp, et que je passe la commande regsvr32 d:\tmp\dao350.dll, alors l'entrée de registre HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000010-0000-0010-8000-00AA006D2EA4}\InprocServer32 ne reflète pas le changement

Par contre, l'entrée de registre HKEY_CLASSES_ROOT\CLSID\{00000010-0000-0010-8000-00AA006D2EA4}\InprocServer32 reflète bien ce changement, c'est à dire que je vois bien la valeur D:\tmp\DAO350.DLL , et non plus c:\program files\...

Et puis il y a encore HKEY_CURRENT_USER\Software\Classes\CLSID, avec apparemment le même train de clés de registres , mais des valeurs différentes.

C'est ce genre d'incertitude qui me fait toujours hésiter à utiliser le registre directement.
Je vais toutefois continuer à gratter cette piste.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Retrouver le chemin d'enregistrement d'une DLL

#4

Message par sksbir »

Voici une autre approche qui fonctionne et que je pense que je vais retenir.
► Afficher le texteCode autoit
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Retrouver le chemin d'enregistrement d'une DLL

#5

Message par Tlem »

La problématique reste, car ce code ne fait que lire les objets (entrées de la base de registre) du CLSID et donc vous aurez le même problème que dans votre exemple précédent, tant que vous n'aurez pas dés-enregistré 'l'ancienne DLL'.

Cela dit, le code sera probablement moins long avec ce code que l'utilisation des fonctions RegRead & CO. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre