Как найти 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 в содержимом файла. Это помогло, потому что оно хранилось в виде обычного текста в ресурсах. Я считаю, что это не всегда так, но моя проблема была решена.