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\"
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? –