如何知道 DLL 是否已注册?

如何知道 DLL 是否已注册?

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

有了 dll 的名称,是否有一个命令可以在命令行运行来验证 DLL 是否已安装?

答案1

我找到了这个链接:如何知道某个 DLL 是否已经注册?

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

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

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

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

更好的答案是让我在文件注册之前直接从文件中找到 GUID。至少这样你可以创建一个脚本来安装并验证它是否已成功安装。

答案2

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

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

如果使用 errorlevel 将控制权发送给标签 whenver 却reg query一无所获。您可能需要更改注册表中搜索的部分(就我而言HKLM'...,路径越具体,速度越快,否则会花费很长时间)。

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

答案3

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

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

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

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

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

相关内容