2009-05-22 5 views
28

Ho una situazione in cui una DLL gestita chiama alcune DLL non gestite. Conosco il CLSID della DLL non gestita, esiste un modo per scoprire quale file binario ospita tale CLSID?Come trovare una DLL data un CLSID?

+1

Stai provando a farlo in modo programmatico o ad hoc? Ad esempio, hai bisogno di un programma per farlo da solo, o è qualcosa che a volte hai bisogno di fare come sviluppatore? –

risposta

32

Normalmente, si può solo andare a:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"

E trovare una chiave denominata "InProcServer32" per esempio, e non ci sarà il valore di default che ha la DLL. Questo è un modo semplice per farlo.

+3

Vale la pena notare che, a seconda di come è stato installato, è possibile trovarlo in HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID. – user1454265

+0

Ciò significa che 'HKEY_CLASSES_ROOT \ CLSID' è quello che dovrebbe essere usato. – IllidanS4

5

Non puoi semplicemente cercarlo nel registro usando regedit e cercare il percorso binario.

2

Sulla base BobbyShaftoe risposta possiamo costruire un semplice script VBS che legge quel registro per noi:

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

Incollare il seguente 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 

È inoltre possibile trovare ProgId da:

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