Как найти DLL с заданным CLSID?

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

4 ответа

Решение

Как правило, вы можете просто перейти к:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID \ "GUID"

И найдите ключ с именем "InProcServer32", например, и будет значение по умолчанию, которое имеет DLL. Это один из простых способов сделать это.

Можете ли вы не просто искать его в реестре с помощью regedit и искать бинарный путь.

Основываясь на ответе 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\"

Я нашел этот вопрос, потому что я устранял неполадки в каком-то неправильно установленном приложении, и моей целью было найти и зарегистрировать ActiveX dll с учетом CLSID (который я получил из источников приложения). Отсюда мой немного хакерский подход.

Я выполнил поиск в каталоге, где, как я полагал, находится dll, ища CLSID в содержимом файла. Это помогло, потому что оно хранилось в виде обычного текста в ресурсах. Я считаю, что это не всегда так, но моя проблема была решена.

Другие вопросы по тегам