Назад | Перейти на главную страницу

Как узнать, зарегистрирована ли DLL?

Когда вы регистрируете DLL на старых машинах (Windows XP), regsrv всегда сообщает, что регистрация прошла успешно. Это происходит, даже если у пользователя нет разрешения на регистрацию.

Есть ли с именем DLL команда, которую я могу запустить в командной строке, чтобы проверить, установлена ​​ли DLL?

Я нашел эту ссылку: Как я могу узнать, зарегистрирована ли DLL?:

Учитывая, что регистрация DLL может включать в себя произвольные операции, не существует универсального способа определения того, произошла ли регистрация для произвольной DLL.

Чтобы определить, была ли зарегистрирована DLL, вам необходимо предоставить знания о предметной области. Если вы знаете, что DLL регистрирует COM-объект с определенным CLSID, вы можете проверить, действительно ли этот CLSID зарегистрирован.

Хорошо, это невозможно, но библиотеки DLL обычно регистрируются, создавая запись в реестре. Обходной путь:

  1. Сначала вам нужно узнать COM GUID библиотеки DLL. Если у вас есть одна машина, на которой она уже зарегистрирована, вы можете:
    1. Откройте regedit и найдите имя файла DLL.
    2. Если он зарегистрирован, вы найдете имя файла под ключом, который находится под TypeLib. Ключ будет выглядеть так: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Теперь, когда вы знаете GUID DLL, вы можете найти его с помощью этой команды в командной строке DOS: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Лучший ответ позволил бы мне найти GUID непосредственно из файла до его регистрации. По крайней мере, таким образом вы можете создать сценарий для установки и проверить, успешно ли он установлен.

Мне нужно было проверить, зарегистрирована ли DLL с определенным именем, и я использовал эту команду в своей BAT:

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

Если с errorlevel отправил управление на этикетку, когда reg query ничего не нашел. Возможно, вам придется изменить часть реестра, в которой вы ищете (в моем случае HKLM'..., чем конкретнее путь, тем быстрее, иначе это займет очень много времени).

При необходимости вывод можно обработать, можно получить GUID для записи, но это выходит за рамки команды запроса reg.

Чтобы найти записи реестра (и, возможно, объекты COM) для DLL из командной строки, комбинация ответов @ virgo47 и @neves сработала для меня лучше всего.

  1. Найдите в реестре записи, содержащие имя DLL. Эти записи обычно используют идентификаторы GUID в качестве ключей.

    reg запрос HKLM \ SOFTWARE \ Classes / s / f Any.dll

  2. (по желанию) Найдите COM-объекты, которые были зарегистрированы для этих GUID. (С помощью /s /f "{GUID}" должно быть быстрее, чем | findstr /i "{GUID}". И | find /i "{GUID}" кажется опечаткой (но я пока не могу писать комментарии к Serverfault).)

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