J'ai une situation dans laquelle une DLL managée appelle une DLL non managée. Je connais le CLSID de la DLL non managée, est-il possible de trouver quel fichier binaire héberge ce CLSID?Comment trouver une DLL avec un CLSID?
Répondre
Normaly, vous pouvez simplement aller à:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"
Et trouver une clé appelée "InProcServer32", par exemple, et il y aura la valeur par défaut qui a la DLL. C'est un moyen simple de le faire.
À noter que, selon la façon dont il a été installé, vous pourriez le trouver dans HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID à la place. – user1454265
Ce qui signifie que 'HKEY_CLASSES_ROOT \ CLSID' est ce qui devrait être utilisé. – IllidanS4
Ne pouvez-vous pas simplement le rechercher dans le registre en utilisant regedit et chercher le chemin binaire.
Sur la base de réponse BobbyShaftoe nous pouvons construire un simple script VBS qui lit ce registre pour nous:
Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
Collez le texte suivant à "Test.vbs"
Sub Main
' used to find location of "System.Collections.ArrayList" progid dll
Const csGUID = "{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}"
MsgBox srGetDllPathByGUID(csGUID)
End Sub
Function srGetDllPathByGUID(sGUID)
Const csRegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
Dim oShell: Set oShell = CreateObject("WScript.Shell")
Dim sReg: sReg = Replace(csRegPath, "<GUID>", sGUID) ' build str
srGetDllPathByGUID = oShell.RegRead(sReg)
Set oShell = Nothing ' clean up
End Function
Call Main
Vous pouvez également trouver ProgId par:
ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"
- 1. Comment trouver quels objets un CLSID donné soutient
- 2. Comment exécuter ShellExecute sur l'objet shell clsid?
- 3. Impossible de trouver DLL PInvoke 'sqlceme30.dll'
- 4. Comment supprimer une DLL auto-installée?
- 5. Compiler une DLL avec gcc
- 6. Impossible de trouver MSCVR90.dll
- 7. Comment trouver le modèle de thread avec lequel une DLL a été construite?
- 8. Trouver un DLL nécessaire après un redéploiement JBoss (chaud)?
- 9. Trouver un littéral avec une expression régulière
- 10. problèmes avec une grande DLL?
- 11. Comment lier un .DLL statiquement?
- 12. Quel est le meilleur outil pour trouver à quelle DLL une autre DLL VB6 est référencée?
- 13. Créer une DLL: Comment utiliser une DLL pour créer une nouvelle DLL?
- 14. comment trouver l'espace de noms dll lors de l'exécution
- 15. Comment résoudre l'exception .NET CF "Impossible de trouver PInvoke DLL"?
- 16. Impossible de trouver un point d'entrée nommé 'GetProcessID' dans la DLL 'kernel32.dll'
- 17. Récupération du composant pour fabrique de classe COM avec CLSID {} 00000535-0000-0010-8000-00AA006D2EA4
- 18. DSL Tools: Comment créer la DLL avec un nom faible
- 19. Comment charger un assembly qui référence une DLL Win32?
- 20. Trouver un objet dans une liste générique avec méthode Find
- 21. Comment appeler une DLL Delphi de VB6
- 22. Comment désactiver une sortie de console .DLL?
- 23. SQL: comment trouver un complément à un ensemble avec une fonction/valeur dérivée
- 24. Problème DLL (COM)
- 25. Comment trouver toutes les correspondances de '{{**** *** **}}' avec une regex?
- 26. Trouver définies dans un avec: Bloc
- 27. Singleton dans une DLL?
- 28. Comment renvoyer une instance d'une DLL?
- 29. Trouver le nom de l'exécutable de dll géré, com visible
- 30. Comment trouver des lettres répétées avec une regex Perl?
Essayez-vous de le faire par programmation, ou ad hoc? C'est-à-dire, avez-vous besoin d'un programme pour le faire lui-même, ou est-ce quelque chose que vous avez parfois besoin de faire en tant que développeur? –