Frage Woher weiß ich, ob eine DLL registriert ist?


Wenn Sie eine DLL auf alten Rechnern (Windows XP) registrieren, sagt regsrv immer, dass die Registrierung erfolgreich war. Dies geschieht auch dann, wenn der Benutzer keine Berechtigung zur Registrierung hat.

Gibt es unter dem Namen der DLL einen Befehl, den ich in der Befehlszeile ausführen kann, um zu überprüfen, ob eine DLL installiert ist?


19
2018-02-19 18:50


Ursprung




Antworten:


Ich habe diesen Link gefunden: Wie kann ich feststellen, ob eine DLL registriert wurde?:

Vorausgesetzt, dass die DLL-Registrierung beliebige Operationen umfassen kann   ist kein allgemeingültiger Weg, um zu bestimmen, ob eine Registrierung stattgefunden hat   statt für eine beliebige DLL.

Um festzustellen, ob eine DLL registriert wurde, müssen Sie sie einspielen   Domänenspezifisches Wissen. Wenn Sie wissen, dass eine DLL eine COM registriert   Objekt mit einer bestimmten CLSID, können Sie überprüfen, ob diese CLSID ist   tatsächlich registriert.

OK, es ist unmöglich, aber DLLs registrieren sich normalerweise selbst, indem sie einen Eintrag im Register erstellen. Eine Problemumgehung besteht darin,

  1. Zuerst müssen Sie die COM-GUID der DLL ermitteln. Wenn Sie einen Computer haben, auf dem er bereits registriert ist, können Sie:
    1. Öffnen Sie regedit und suchen Sie nach Ihrem DLL-Dateinamen
    2. Wenn es registriert ist, finden Sie den Dateinamen unter einem Schlüssel, der sich unter der TypeLib befindet. Der Schlüssel sieht wie folgt aus: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Jetzt, da Sie die DLL-GUID kennen, können Sie mit diesem Befehl in einer DOS-Eingabeaufforderung danach suchen: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Eine bessere Antwort würde mir erlauben, die GUID direkt aus der Datei zu finden, bevor sie registriert wurde. Auf diese Weise können Sie ein Skript zur Installation erstellen und überprüfen, ob es erfolgreich installiert wurde.


15
2018-02-19 18:58



Sie müssen die GUID vorher nicht wirklich kennen. Ein einfacherer Ansatz wäre, die Registrierung nach der DLL zu durchsuchen Dateiname: Wenn dieser Name unter einem dieser GUID-Schlüssel aufgeführt ist, dann ist ja die DLL tatsächlich registriert worden. - Massimo
@Massimo: aber wie würde ich danach suchen? In welchem ​​Schlüssel? Es kann fälschlicherweise in der Shell-Historie angezeigt werden (z. B. versucht, sich zu registrieren, ohne ein Administrator zu sein) - neves
Unter HKCR, offensichtlich :) Oder zumindest unter HKLM. Benutzerspezifische Dinge (wie Shell-Geschichte) sind unter HKCU. - Massimo
@Massimo: Wenn Sie hier eine Antwort mit dem Shell-Befehl eingeben, um danach zu suchen, werde ich sie als die richtige Antwort markieren. - neves
Es ist das gleiche wie deines: benutze es REG QUERY um nach dem Namen der DLL-Datei zu suchen. - Massimo


Ich musste überprüfen, ob eine DLL mit einem bestimmten Namen registriert ist, und ich habe diesen Befehl in meinem BAT verwendet:

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

Wenn mit errorlevel Kontrolle an das Label gesendet wurde, wann immer reg query nichts gefunden. Möglicherweise müssen Sie den Teil der Registrierung ändern, in dem Sie suchen (in meinem Fall) HKLM'..., je spezifischer der Pfad, desto schneller, sonst dauert es sehr lange).

Die Ausgabe kann bei Bedarf verarbeitet werden, GUID für den Eintrag kann abgerufen werden, aber das ist außerhalb des Bereichs des reg-Abfragebefehls.


10
2017-07-30 13:55