2009-05-22 21 views
28

Tengo una situación en la que una DLL administrada llama a algunas DLL no administradas. Conozco el CLSID de la DLL no administrada, ¿hay alguna forma de averiguar qué archivo binario contiene ese CLSID?¿Cómo encontrar una DLL dado un CLSID?

+1

¿Está tratando de hacer esto programáticamente o ad hoc? Es decir, ¿necesita un programa para hacerlo por sí mismo o es algo que de vez en cuando debe hacer como desarrollador? –

Respuesta

32

Normaly, sólo puede ir a:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"

y encontrar una clave llamada "InProcServer32" por ejemplo, y no habrá el valor por defecto que tiene la DLL. Esta es una manera simple de hacerlo.

+3

Merece la pena señalar que, en función de cómo se haya instalado, puede encontrarlo en HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID. – user1454265

+0

Lo que significa que 'HKEY_CLASSES_ROOT \ CLSID' es lo que se debe usar. – IllidanS4

5

Puede no solo buscarlo en el registro usando regedit y buscar la ruta binaria.

2

Basado en respuesta BobbyShaftoe podemos construir un script vbs simple que lee ese registro para nosotros:

Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\" 

pegar el siguiente a "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 

También puede encontrar ProgId por:

ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\" 
Cuestiones relacionadas