2009-05-22 8 views
28

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?

+1

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

Répondre

32

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.

+3

À 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

+0

Ce qui signifie que 'HKEY_CLASSES_ROOT \ CLSID' est ce qui devrait être utilisé. – IllidanS4

5

Ne pouvez-vous pas simplement le rechercher dans le registre en utilisant regedit et chercher le chemin binaire.

2

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\" 
Questions connexes