Windows - 如何判断一个DLL已经注册

在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

你可能感兴趣的:(其他,windows)