Як дізнатися, чи зареєстрована DLL?


28

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

З ім'ям dll чи є команда, яку я можу запустити в командному рядку, щоб перевірити, чи встановлена ​​DLL?

Відповіді:


22

Я знайшов це посилання: Як я можу дізнатися, чи зареєстрована 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 безпосередньо з файлу до його реєстрації. Принаймні таким чином ви можете створити сценарій для встановлення та перевірити, чи він був успішно встановлений.


4
Вам фактично не потрібно знати GUID заздалегідь. Більш простим підходом було б пошук у Реєстрі за назвою файлу DLL : якщо це ім’я вказане під будь-яким із цих ключів GUID, то так, DLL дійсно зареєстровано.
Массімо

@Massimo: але як би я це шукав? У якому ключі? Він може помилково відображатися в історії оболонки (наприклад, намагався зареєструватися, не будучи адміністратором)
нед

Під HKCR, очевидно :) Або принаймні під HKLM. Специфічні для користувача речі (наприклад, історія оболонок) знаходяться під HKCU.
Массімо

@ Массімо: якщо ви покладете тут відповідь за допомогою команди оболонки для пошуку, я позначу це правильною відповіддю.
neves

Це те саме, що і ваше: використовуйте REG QUERYдля пошуку імені файлу DLL.
Массімо

13

Мені потрібно було перевірити, чи зареєстрована DLL з конкретним іменем, і я використовував цю команду в своєму BAT:

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

Якщо з рівнем помилок надсилав керування етикетці, коли ніколи reg queryнічого не знаходив. Можливо, вам знадобиться змінити частину реєстру, де ви шукаєте (у моєму випадку HKLM'..., чим конкретніший шлях, тим швидше, інакше це займе дуже багато часу).

Вихід може бути оброблений при необхідності, GUID для запису може бути отриманий, але це не входить до сфери використання команди запиту рег.


0

Щоб знайти записи реєстру (і необов'язково COM-об'єкти) для DLL з командного рядка , найкраще для мене працювала комбінація відповідей @ virgo47 та @neves.

  1. Знайдіть записи реєстру, що містять ім'я DLL. Ці записи зазвичай використовують GUID як свої ключі.

    регістр запиту HKLM \ SOFTWARE \ Classes / s / f what.dll

  2. (необов’язково) Знайдіть COM-об’єкти, які були зареєстровані для цих GUID. (Використання /s /f "{GUID}"має бути швидше, ніж | findstr /i "{GUID}". І, | find /i "{GUID}"здається, друкарська помилка (але я поки не можу писати коментарів на серверних замовчуванням).)

    регістр запиту HKCR \ CLSID / s / f "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.