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
[R] Retrouver le chemin d'enregistrement d'une DLL
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- sksbir
- 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
Modifié en dernier par sksbir le jeu. 09 sept. 2010 11:46, modifié 1 fois.
- Tlem
- 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
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é.
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é".
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é".
- sksbir
- 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
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.
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.
- sksbir
- 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
Voici une autre approche qui fonctionne et que je pense que je vais retenir.
► Afficher le texteCode autoit
- Tlem
- 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
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.
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é".
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é".
