30

我有一个托管 DLL 调用一些非托管 DLL 的情况。我知道非托管 DLL 的 CLSID,有没有办法找出那个 CLSID 所在的二进制文件?

4

4 回答 4

37

Normaly,你可以去:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\"GUID"

并找到一个名为“InProcServer32”的键,例如,将有具有 DLL 的默认值。这是一种简单的方法。

于 2009-05-22T13:13:19.547 回答
7

你能不能只使用 regedit 在注册表中搜索它并查找二进制路径。

于 2009-05-22T13:11:32.373 回答
3

根据 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\"
于 2015-02-08T09:05:55.337 回答
0

我发现了这个问题,因为我正在对一些安装不正确的应用程序进行故障排除,我的目标是找到并注册给定 CLSID(我从应用程序源获得)的 ActiveX dll。因此,我有点hacky的方法。

我已经在我认为 dll 所在的目录中进行了搜索,以查找文件内容中的 CLSID。这成功了,因为它以纯文本形式存储在资源中。我相信情况并非总是如此,但我的问题已经解决了。

于 2021-04-19T09:59:49.863 回答