如何在给定CLSID的情况下查找DLL?

如何在给定CLSID的情况下查找DLL?,dll,clsid,Dll,Clsid,我有一种情况,托管DLL调用一些非托管DLL。我知道非托管DLL的CLSID,有没有办法找到该CLSID所在的二进制文件?您可以使用regedit在注册表中搜索它并查找二进制路径。通常,您可以转到: HKEY\U LOCAL\U MACHINE\SOFTWARE\Classes\CLSID\“GUID” 例如,找到一个名为“InProcServer32”的键,就会有一个包含DLL的默认值。这是一种简单的方法。基于BobbyShaftoe回复,我们可以构建一个简单的vbs脚本,为我们读取注册表:

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

您可以使用regedit在注册表中搜索它并查找二进制路径。

通常,您可以转到:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Classes\CLSID\“GUID”


例如,找到一个名为“InProcServer32”的键,就会有一个包含DLL的默认值。这是一种简单的方法。

基于BobbyShaftoe回复,我们可以构建一个简单的vbs脚本,为我们读取注册表:

Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
Dll\u RegPath=“HKEY\u CLASSES\u ROOT\CLSID\\InProcServer32\”
将以下内容粘贴到“test.vbs”

Sub-Main
'用于查找“System.Collections.ArrayList”progid dll的位置
Const csGUID=“{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}”
MsgBox srGetDllPathByGUID(csGUID)
端接头
函数srGetDllPathByGUID(sGUID)
Const csRegPath=“HKEY\U CLASSES\U ROOT\CLSID\\InProcServer32\”
Dim oShell:Set oShell=CreateObject(“WScript.Shell”)
Dim sReg:sReg=Replace(csRegPath,“,sGUID)”build str
srGetDllPathByGUID=oShell.RegRead(sReg)
设置oShell=无“清理”
端函数
呼叫总管
您还可以通过以下方式找到ProgId:

ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"
ProgID\u RegPath=“HKEY\u CLASSES\u ROOT\CLSID\\ProgID”

我发现这个问题是因为我正在对一些错误安装的应用程序进行故障排除,我的目标是在给定CLSID的情况下查找并注册ActiveX dll(我从应用程序源代码中获得)。因此我的方法有点老套


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

你是想通过编程还是临时的方式来解决这个问题?也就是说,你是否需要一个程序自己来做这件事,或者这是作为开发人员偶尔需要做的事情?值得注意的是,这取决于它的安装方式,您可能会在HKEY\U CURRENT\U USER\SOFTWARE\Classes\CLSID中找到它。这意味着应该使用
HKEY\U Classes\U ROOT\CLSID
。或者HKEY\U Classes\U ROOT\WOW6432Node\CLSID
ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"