2009-05-22 43 views
28

Tôi có một tình huống trong đó một DLL được quản lý gọi một số DLL không được quản lý. Tôi biết CLSID của DLL không được quản lý, có cách nào để tìm ra những tập tin nhị phân nhà mà CLSID?Làm thế nào để tìm một DLL cho một CLSID?

+1

Bạn đang cố gắng thực hiện điều này theo chương trình, hoặc quảng cáo hoc? Tức là, bạn có cần một chương trình để tự làm điều này hay đây là điều mà đôi khi bạn cần làm với tư cách là một nhà phát triển? –

Trả lời

32

Normaly, bạn chỉ có thể đi đến:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"

Và tìm một chìa khóa gọi là "InprocServer32" ví dụ và sẽ có giá trị mặc định mà có DLL. Đây là một cách đơn giản để làm điều đó.

+3

Lưu ý rằng, tùy thuộc vào cách nó được cài đặt, bạn có thể tìm thấy nó trong HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID thay thế. – user1454265

+0

Có nghĩa là 'HKEY_CLASSES_ROOT \ CLSID' là những gì nên được sử dụng. – IllidanS4

5

Bạn có thể không chỉ tìm kiếm nó trong sổ đăng ký sử dụng regedit và tìm kiếm đường dẫn nhị phân.

2

Dựa trên BobbyShaftoe trả lời chúng ta có thể xây dựng một kịch bản vbs đơn giản mà đọc registry mà đối với chúng tôi:

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

Dán sau đây để "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 

Bạn cũng có thể tìm ProgID by:

ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\" 
Các vấn đề liên quan