Как найти DLL с данным CLSID? - PullRequest
29 голосов
/ 22 мая 2009

У меня есть ситуация, когда управляемая DLL вызывает некоторую неуправляемую DLL. Я знаю CLSID неуправляемой DLL, есть ли способ узнать, в каких двоичных файловых домах находится этот CLSID?

Ответы [ 3 ]

36 голосов
/ 22 мая 2009

Нормально, вы можете просто перейти на:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"

И найдите, например, ключ с именем «InProcServer32», и будет значение по умолчанию, содержащее DLL. Это один простой способ сделать это.

7 голосов
/ 22 мая 2009

Можете ли вы не просто искать его в реестре, используя regedit, и искать двоичный путь.

3 голосов
/ 08 февраля 2015

На основе ответа BobbyShaftoe мы можем создать простой скрипт VBS, который читает этот реестр для нас:

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

Вставьте следующее в "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

Вы также можете найти ProgId по:

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