Come faccio a sapere se una DLL è registrata?


28

Quando registri una DLL su macchine vecchie (Windows XP), regsrv dice sempre che la registrazione ha avuto successo. Questo succede anche se l'utente non ha il permesso di registrarsi.

Con il nome della dll, esiste un comando che posso eseguire dalla riga di comando per verificare se è installata una DLL?

Risposte:


22

Ho trovato questo link: come posso sapere se una DLL è stata registrata? :

Dato che la registrazione DLL può comprendere operazioni arbitrarie, non esiste un modo generico per determinare se la registrazione è avvenuta per una DLL arbitraria.

Per determinare se una DLL è stata registrata, è necessario apportare conoscenze specifiche del dominio. Se sai che una DLL registra un oggetto COM con un particolare CLSID, puoi verificare se quel CLSID è effettivamente registrato.

OK, è impossibile, ma le DLL di solito si registrano creando una voce nel registro. Una soluzione alternativa è:

  1. Innanzitutto devi scoprire il GUID COM della DLL. Se hai una macchina in cui è già registrata, puoi:
    1. Apri regedit e cerca il tuo nome file DLL
    2. Se è registrato, troverai il nome file sotto una chiave che si trova sotto TypeLib. La chiave sarà simile a: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Ora che conosci il GUID DLL, puoi cercarlo con questo comando in un prompt di DOS: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Una risposta migliore mi consentirebbe di trovare il GUID direttamente dal file prima che fosse registrato. Almeno in questo modo è possibile creare uno script da installare e verificare se è stato installato correttamente.


4
In realtà non è necessario conoscere il GUID in anticipo. Un approccio più semplice sarebbe quello di cercare nel registro il nome del file DLL : se quel nome è elencato in una di quelle chiavi GUID, allora sì, la DLL è stata effettivamente registrata.
Massimo,

@Massimo: ma come lo cercherei? In quale chiave? Può essere erroneamente visualizzato nella cronologia della shell (ad esempio, ha tentato di registrarsi senza essere un amministratore)
neves

Sotto HKCR, ovviamente :) O almeno sotto HKLM. Le cose specifiche dell'utente (come la cronologia della shell) sono sotto HKCU.
Massimo,

@Massimo: se inserisci una risposta qui con il comando shell per cercarla, la segnerò come risposta corretta.
neves

È uguale al tuo: usa REG QUERYper cercare il nome del file DLL.
Massimo,

13

Ho dovuto verificare se una DLL con un nome particolare è registrata e ho usato questo comando nella mia BAT:

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

Se con il livello di errore ha inviato il controllo all'etichetta quando reg querynon ha trovato nulla. Potrebbe essere necessario modificare la parte del registro in cui si effettua la ricerca (nel mio caso HKLM'..., il percorso più specifico è più veloce, altrimenti impiega molto tempo).

L'output può essere elaborato se necessario, è possibile ottenere il GUID per la voce, ma non rientra nell'ambito del comando reg query.


0

Per trovare voci di registro (e facoltativamente oggetti COM) per una DLL dalla riga di comando , una combinazione delle risposte di @ virgo47 e @neves ha funzionato meglio per me.

  1. Trova le voci di registro che contengono il nome DLL. Queste voci utilizzano in genere GUID come chiavi.

    reg query HKLM \ SOFTWARE \ Classes / s / f whatever.dll

  2. (facoltativo) Trova oggetti COM che sono stati registrati per questi GUID. (L'uso /s /f "{GUID}"dovrebbe essere più veloce di | findstr /i "{GUID}". E | find /i "{GUID}"sembra essere un refuso (ma non posso ancora scrivere commenti su Serverfault).)

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.