在DOS界面提示符下运行命令,在注册表中查找包含此DLL文件名的条目,查找出的结果如下(以msadox.dll为例):
这个查找结果,和你打开注册表编辑器手动查找该DLL文件名是一样的。
C:\Users\>reg query HKLM\SOFTWARE\Classes /s /f "msadox.dll"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000602-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000609-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000615-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000618-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000061B-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000061E-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000621-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00000600-0000-0010-8000-00AA006D2EA4}\6.0\0\win32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00000600-0000-0010-8000-00AA006D2EA4}\6.0\0\win64
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{00000602-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{00000609-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{00000615-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{00000618-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{0000061B-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{0000061E-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{00000621-0000-0010-8000-00AA006D2EA4}\InprocServer32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{00000600-0000-0010-8000-00AA006D2EA4}\6.0\0\win32
(Default) REG_SZ C:\Program Files (x86)\Common Files\System\ado\msadox.dll
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\TypeLib\{00000600-0000-0010-8000-00AA006D2EA4}\6.0\0\win64
(Default) REG_SZ C:\Program Files\Common Files\System\ado\msadox.dll
End of search: 18 match(es) found.
我们看到查找的结果包含的数据格式为:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}
后面大括号内是是COM对象类的CLSID,是一个GUID,用来标识COM对象类。一个DLL文件内可能包含多个COM对象的类,每个类都需要注册一个CLSID。
也就是说,如果找到了这些信息,就表示此DLL文件已被注册。
相应的CLSID,也可以在HKEY_CLASSES_ROOT中查到:
C:\Users\>reg query HKCR\CLSID /s /f "{00000602-0000-0010-8000-00AA006D2EA4}"
HKEY_CLASSES_ROOT\CLSID\{00000602-0000-0010-8000-00AA006D2EA4}
End of search: 1 match(es) found.
===分割线===
CLSID是什么?
CLSID是一个全局唯一的标识符,用于识别一个COM class object。如果你的服务器或容器支持链接嵌入的对象,那每个嵌入的对象的类都需要注册一个CLSID。
CLSID是一个128位的数字,用十六进制表示,用一对大括号括起来。
要为你的应用程序获取一个CLSID,你可以使用Uuidgen.exe,或者使用CoCreateGuid函数。
COM组件的处理器,在使用这个COM对象时,默认情况下会从COM对象对应的CLSID注册表键中获取相关信息。
在注册表中注册的Key的位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
此键之下还包含了很多键值,请参照文章末尾参考链接。
与HKEY_LOCAL_MACHINE\SOFTWARE\Classes相对应的,是注册表中的HKEY_CLASSES_ROOT键,保留这个HKEY_CLASSES_ROOT是为了和早期版本的COM组件保持兼容。
参考:
1,How do I know if a DLL is registered?
windows - How do I know if a DLL is registered? - Server Fault
2,CLSID是什么
CLSID Key - Win32 apps | Microsoft Learn