题 我怎么知道DLL是否已注册?


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

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


19
2018-02-19 18:50






答案:


我发现了这个链接: 如何判断DLL是否已注册?

鉴于DLL注册可以包含任意操作,那里   不是确定注册是否具有的通用方法   发生任意DLL。

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

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

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

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


15
2018-02-19 18:58



您实际上并不需要事先知道GUID。一种更简单的方法是在Registry中搜索DLL 文件名:如果该名称列在任何一个GUID键下,那么是,DLL确实已经注册。 - Massimo
@Massimo:但我会如何搜索它?在哪个键?它可能会错误地显示在shell历史记录中(例如,尝试注册而不是管理员) - neves
在HKCR,显然:)或至少在HKLM下。用户特定的东西(如shell历史)属于HKCU。 - Massimo
@Massimo:如果你在这里用shell命令来回答它,我会把它标记为正确的答案。 - neves
它与你的相同:使用 REG QUERY 查找DLL文件名。 - Massimo


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

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

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

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


10
2017-07-30 13:55