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?
Trả lời
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 đó.
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
Có nghĩa là 'HKEY_CLASSES_ROOT \ CLSID' là những gì nên được sử dụng. – IllidanS4
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.
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\"
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? –