我如何知道DLL是否已注册?


28

当您在旧计算机(Windows XP)中注册DLL时,regsrv总是说注册成功。即使用户没有注册权限,也会发生这种情况。

使用dll的名称,是否可以在命令行上运行以验证是否已安装DLL的命令?

Answers:


22

我找到了此链接:如何确定DLL是否已注册?

鉴于DLL注册可以包含任意操作,因此没有通用的方法来确定是否已为任意DLL进行注册。

要确定DLL是否已注册,您需要引入特定于域的知识。如果知道DLL使用特定的CLSID注册了COM对象,则可以检查该CLSID是否确实已注册。

是的,这是不可能的,但是DLL通常会自行注册,从而在寄存器中创建一个条目。解决方法是:

  1. 首先,您必须发现DLL的COM GUID。如果您有一台已经注册过的机器,则可以:
    1. 打开regedit并搜索您的DLL文件名
    2. 如果已注册,则可以在TypeLib下的项下找到文件名。密钥如下所示:{9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. 现在您知道了DLL GUID,可以在DOS提示符下使用以下命令搜索它: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

更好的答案是允许我在注册之前直接从文件中找到GUID。至少通过这种方式,您可以创建脚本来安装并验证脚本是否已成功安装。


4
您实际上不需要事先知道GUID。一种更简单的方法是在注册表中搜索DLL 文件名:如果该名称在这些GUID密钥中的任何一个下列出,那么是的,DLL确实已被注册。
Massimo 2014年

@Massimo:但是我将如何搜索呢?用哪个键?它可能会错误地显示在shell历史记录中(例如,试图在没有管理员身份的情况下进行注册)
neves

在HKCR下,显然:)或至少在HKLM下。用户特定的内容(例如外壳历史记录)在HKCU下。
Massimo 2014年

@Massimo:如果您在此处使用shell命令搜索答案,则将其标记为正确答案。
neves

它与您的相同:用于REG QUERY查找DLL文件名。
Massimo 2014年

13

我需要检查是否已注册具有特定名称的DLL,并且在BAT中使用了以下命令:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

如果有错误级别,则reg query什么也没找到,就将控制权发送给标签。您可能需要更改注册表中要搜索的部分(在我的情况下HKLM'...,路径越具体越快,否则会花费很长时间)。

如有必要,可以处理输出,可以获得该条目的GUID,但这超出了reg query命令的范围。


0

从命令行查找DLL的注册表项(以及可选的COM对象),@ virgo47和@neves的答案的组合对我来说最合适。

  1. 查找包含DLL名称的注册表项。这些条目通常使用GUID作为其键。

    reg查询HKLM \ SOFTWARE \ Classes / s / f what.dll

  2. (可选)查找已为这些GUID注册的COM对象。(使用/s /f "{GUID}"速度应比| findstr /i "{GUID}"。快。这| find /i "{GUID}"似乎是一个错字(但我还不能在Serverfault上写评论)。)

    reg查询HKCR \ CLSID / s / f“ {9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.