我遇到托管DLL调用某些非托管DLL的情况。我知道非托管DLL的CLSID,有什么方法可以找出哪个二进制文件包含那个CLSID?
答案 0 :(得分:36)
Normaly,你可以去:
HKEY_LOCAL_MACHINE \ SOFTWARE \类\ CLSID \ “GUID”
并找到一个名为“InProcServer32”的密钥,并且将有一个具有DLL的默认值。这是一种简单的方法。
答案 1 :(得分:7)
您是否可以使用regedit在注册表中搜索它并查找二进制路径。
答案 2 :(得分: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\"
答案 3 :(得分:0)
我发现这个问题是因为我正在对一些安装不正确的应用程序进行故障排除,我的目标是找到并注册给定 CLSID(我从应用程序源获得的)的 ActiveX dll。因此,我的方法有点笨拙。
我在我认为 dll 所在的目录中进行了搜索,以查找文件内容中的 CLSID。这确实奏效了,因为它以纯文本形式存储在资源中。我相信情况并非总是如此,但我的问题已经解决了。