mercoledì 20 agosto 2014

Librerie DLL, cosa sono, a che servono, come registrarle, deregistrarle e ripristinarle

Le DLL sono "porzioni" di software con funzioni specifiche. Per esempio, la maggior parte delle interfacce grafiche fa uso di finestre di dialogo (dialog box) le cui funzioni sono fornite da un'apposita libreria (in molte versioni di Windows è la libreria Comdlg32.DLL). DLL è l'acronimo di Dynamic Link Library (libreria a collegamento dinamico), la versione Microsoft delle shared library (libreria condivisa) usate nei sistemi Unix.

 I file che contengono DLL possono avere estensioni come .DLL, .OCX (librerie per controlli ActiveX, per esempio un controllo grafico che permette di scegliere una data da un calendario) o .DRV (un'estensione usata nelle vecchie versioni di Windows per i driver di periferica).
Esistono inoltre le DLL di risorse, per esempio le librerie di icone (con estensione .ICL) o le librerie di font/caratteri (con estensione .FON o .FOT).

Vantaggi delle DLL:

  • riducono l'uso di risorse perché possono essere caricate al volo solo quando è necessario;
  • semplificano il lavoro degli sviluppatori, che hanno a disposizione moltissime funzionalità già pronte da incorporare nelle applicazioni;
  • facilitano l'installazione e la manutenzione del software.
Lo svantaggio prncipale delle DLL è che creano dipendenza alle applicazioni che le usano: se si rovina una DLL importante, tutte le applicazioni che hanno bisogno delle sue funzioni andrammo incontro a malfunzionamenti più o meno gravi (ciò vale anche per le DLL che usano altre DLL).

Registrare una DLL

Affinché una DLL sia utilizzabile dal sistema o da un'applicazione deve essere registrata. Le applicazioni, al momento della propria installazione, verificano se i file DLL di cui hanno bisogno sono presenti nel sistema, installando e registrando quelli mancanti. Purtroppo non sempre va tutto per il verso giusto e, al momenta dell'avvio di un'applicazione, può apparire un messaggio di avviso che un certo file DLL/OCX/ecc. risulta mancante o non correttamente registrato. A questo punto ci sono essenzialmente 2 opzioni:
  • disinstallare e reinstallare l'applicazione che ha dato origine all'errore oppure
  • tentare di rimediare manualmente.
Se il file risulta mancante bisogna cercarlo in una cartella, solitamente:
  • una cartella specificata nel messaggio di errore, oppure
  • in \Windows\System32\, oppure
  • nella cartella di installazione dell'applicazione.
Se il file è nel sistema dovrebbe essere sufficiente registrarlo manualmente con il comando
regsvr32 <percorso-e-nome-del-file-DLL>
Il comando deve essere digitato dall'amministratore di sistema in START/Esegui (oppure aprendo un prompt dei comandi con i privilegi di amministratore all'interno della cartella che contiene il file .dll o il controllo .ocx incriminato. Al comando può essere aggiunto il parametro /s che esegue la registrazione in modalità "silenziosa" (non visualizza finestre di messaggi che confermano l'avvenuta registrazione).

ESEMPI
Per registrare il file CMDLGIT.DLL digitare
regsvr32 cmdlgit.dll

per registrare "silenziosamente" il controllo COMDLG32.OCX digitare
regsvr32 /s comdlg32.ocx

Deregistrare una DLL

La deregistrazione di una DLL può essere necessaria per disabilitare una DLL attualmente registrata e sostituirla con una versione più aggiornata (il cui file ha ovviamente lo stesso nome). Si usa di nuovo l'utility regsvr32 aggiungendo il parametro /u (unregister, annulla la registrazione); il comando deve essere eseguito come amministratore di sistema:
regsvr32 /u <percorso-e-nome-del-file-DLL>

ESEMPI
Per deregistrare il file CMDLGIT.DLL digitare
regsvr32 /u cmdlgit.dll

per deregistrare "silenziosamente" il controllo COMDLG32.OCX digitare
regsvr32 /u /s comdlg32.ocx

Possibili problemi e sistemi Windows a 64 bit

Sebbene la registrazione/deregistrazione di una DLL sia un'operazione semplice, a volte può risultare macchinosa. Questo accade, per esempio, quando il file da registrare/deregistrare si trova in una cartella con un percorso molto lungo e/o annidato all'interno del file system. In tal caso, digitare manualmente il percorso del file DLL da dare in input al comando regsvr32, è un'operazione noiosa e soggetta ad errori di digitazione.

Altre volte potrebbe essere necessario registrare/deregistrare una DLL a 32 bit all'interno di un sistema operativo a 64 bit. Nei sistemi Windows a 64 bit, esistono 2 versioni del file regsvr32.exe:
  • la versione a 64 bit si trova nella cartella %systemroot%\System32\ (esattamente come nei sistemi a 32 bit), ossia tipicamente in C:\Windows\System32\
  • la versione a 32 bit si trova in %systemroot%\SysWOW64\ quindi tipicamente in C:\Windows\SysWOW64\
Difatti, contrariamente a quanto facciano pensare i nomi delle cartelle, in tutti i sistemi Windows a 64 bit:
  • i file di sistema a 64 bit si trovano in \Windows\System32\;
  • invece la cartella \Windows\SysWOW64\ è la directory in cui vengono installati i file di sistema a 32 bit!
Nei sistemi Windows a 64 bit, il sottosistema WOW64 (Windows On Windows) serve a emulare l'ambiente a 32 bit all'interno di quello a 64 bit, per garantire la compatibilità con gli applicativi a 32 bit/x86 (l'ambiente di emulazione WOW64 oltre a tale cartella comprende anche sezioni apposite del registro di configurazione di Windows).

Quindi:
  • per registrare una DLL a 32 bit su un sistema a 64 bit, occorre usare la versione a 32 bit di regsvr32, per cui il comando per registrare la DLL è
    %systemroot%\SysWOW64\regsvr32 <percorso-e-nome-del-file-DLL>
    e analogamente per deregistrarla
    %systemroot%\SysWOW64\regsvr32 /u <percorso-e-nome-del-file-DLL>
  • per registrare/deregistrare una DLL a 64 bit su un sistema a 64 bit i comandi sono quelli canonici, ossia rispettivamente
    regsvr32 <percorso-e-nome-del-file-DLL> per la registrazione e
    regsvr32 /u <percorso-e-nome-del-file-DLL> per la deregistrazione.

Semplificare le operazioni con RegDllView

RegDllView (https://www.nirsoft.net/utils/registered_dll_view.html) è un'utility che serve a visualizzare, registrare o deregistrare i file DLL/OCX (scaricare la versione a 32 bit per i sistemi Windows a 32 bit e solo la versione a 64 bit per i sistemi Windows a 64 bit).

All'avvio (che richiede diversi secondi) esegue una scansione di tutti gli oggetti registrati; l'utility deve essere avviata con privilegi di amministratore per permettere le operazioni di registrazione/deregistrazione.
La sezione superiore dell'interfaccia grafica mostra una lista di tali oggetti; selezionando una delle voci, nella parte inferiore vengono mostrati gli elementi correlati nel registro di Windows.

Per deregistrare uno o più elementi, occorre selezionarli, fare click su di essi con il tasto destro del mouse e selezionare la voce "Unregister Selected Files"; la voce "Delete All Entries For Selected Files" invece elimina le relative entrate nel registro.

Per registrare un file bisogna andare nel menu File/Register File (oppure premere <F6>), navigare nel file system fino alla cartella che contiene il file da registrare, selezionarlo, infine premere il pulsante <Apri>. La guida dell'utility riporta che la registrazione funziona anche con il Drag&Drop, trascinando una DLL da Esplora risorse e rilasciandola nella finestra di RegDllView, tuttavia durante le prove fatte su Windows 7 a 64 bit questo metodo non ha funzionato.
RegDllView

Ripristinare una DLL

A volte succede che una libreria sia sovrascitta o cancellata per errore, oppure si corrompe il file che la contiene; in questi casi è necessario ripristinarla. Se il malunzionamento viene rilevato dopo l'installazione di un'applicazione, in genere è sufficiente disinstallare e reinstallare nuovamente l'applicazione. Se il problema persiste, oppure non si ha idea di quale possa essere la causa del malfunzionamento, bisogna ripristinare la libreria, anche a costo di dover reinstallare l'intero sistema.

Una scorciatoia che NON consiglio è ricorrere al download di singole librerie su siti web "specializzati" in DLL, poiché essi non sono una fonte sicura. Ecco alcuni problemi a cui si va incontro:
  • la libreria non risolve il vostro problema, oppure lo risolve su un'applicazione e provoca il malfunzionameto di altre;
  • la libreria è obsoleta e mette a rischio la sicurezza del sistema;
  • scaricate una libreria per la versione sbagliata di Windows o pensata per una versione in un'altra lingua;
  • scaricate una libreria infetta da malware (virus, trojan, spyware ecc.).
Cosa fare allora?
La via maestra è cercare di capire l'origine del problema: la mancanza di una singola DLL potrebbe NON essere il vero problema. Per esempio se il malfunzionamente si manifesta su una delle centinaia di DLL contenute in package come le DirectX, scaricare un paio di DLL (magari obsolete) non risolve nulla, bisogna reinstallare l'intero pacchetto DirectX. Quello che bisogna fare è ricorrere ad un motore di ricerca come Google, inserire nel campo di ricerca il problema ed il nome della/delle DLL coinvolte e cercare di capire quali altri utenti hanno avuto lo stesso problema, in quali circostanze e come lo hanno risolto. Spesso si riesce a capire cosa fare, ed in genere la soluzione è la reinstallazione di determinati software o di alcune patch specifiche per Windows. Bisogna solo armarsi di pazienza, cercare e leggere con attenzione! Un suggerimento sempre valido è migliorare la conescenza dell'Inglese: i siti di supporto tecnico in lingua Inglese sono i migliori!

POTREBBE INTERESSARTI ANCHE…