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

nev*_*ves 33 windows windows-xp dll

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

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

nev*_*ves 26

我找到了这个链接:如何判断 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。至少通过这种方式,您可以创建一个脚本来安装并验证它是否已成功安装。

  • 您实际上不需要事先知道 GUID。一种更简单的方法是在注册表中搜索 DLL *文件名*:如果该名称列在这些 GUID 键中的任何一个下,那么是的,该 DLL 确实已被注册。 (6认同)

小智 18

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

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING
Run Code Online (Sandbox Code Playgroud)

如果使用 errorlevel 将控制发送到标签,则无论何时reg query一无所获。您可能需要更改您搜索的注册表部分(在我的情况下HKLM'...,路径越具体越快,否则需要很长时间)。

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


小智 5

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

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

    reg 查询 HKLM\SOFTWARE\Classes /s /fwhatever.dll

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

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