8-07-04 14:11
[MS Windows] DLL raj, iliti zaštićeni DLL-ovi i regsvr32.exe
piše BORIS TROJAN
U vremenima prije OS-a 2000, još od prvih verzija Windowsa, operativni sistem i aplikacije ovise o DLL-ovima, kratkim komadima koda koji obavljaju neke standardne, uobičajene funkcije potrebne kako aplikacijama tako i sistemu. Zajedničko im je ime OLE kontrole (object linking and embedding controls) - dynamic-link library (DLL) i ActiveX Controls (OCX).
DLL-ovi mogu biti vezani uz određenu aplikaciju ili mogu biti 'sistemski'; potonje dijele i aplikacije i OS. Prije Windowsa 2000 DLL-ovi su stvarali probleme jer su često mijenjali funkcionalnost i ponašanje kroz Microsoftove izmjene OS-a, a mijenjali su ih i programeri kroz proces razvoja aplikacije.
Microsoft je izmjene stvarao kroz patcheve i hotfixeve, a developeri su onda kao odgovor stvarali vlastite DLL-ove. Nevolje su se događale kad bi instalirane aplikacije zahtjevale različite verzije DLL-a: ili verzija nije bila dostupna u sistemu, ili je sistemska verzija bila zamijenjena pa je patio OS...
DLL-ovi su danas zaštićeni digitalnim potpisom koji nose unutar samih sebe, odnosno Windows File Protection sistemom. Originalne verzije smještene su u
%systemroot%\system32\dllcache
ili se nalaze na instalacijskom cd-u. Izmjene u DLL-u sada su dopuštene samo aplikacijama s odgovarajućim potpisom (service pack ili hotfix). Ako neautorizirana aplikacija pokuša izmijeniti neki DLL, takav se događaj otkriva preko potpisa i originalna verzija se automatski iz cachea vraća u prvobitno stanje. Na taj način developeri ne mogu u sistem ubaciti DLL koji bi eventualno stvorio probleme. Prinuđeni su ili ne koristiti sistemski DLL u svom kodu, ili kod moraju prilagoditi
radu sistemskog DLL-a. Prilikom prilagođavanja datoteke, Windows 2000 im omogućava korištenje "privatne" verzije DLL-a isključivo za potrebe aplikacije i tada se on može razlikovati od originala koje koristi OS. Tako se OS izolira od aplikacije i postiže bolju stabilnost od starijih verzija.
No, ova teorija i propušta. Na probleme sa DLL-ovima nailazimo i danas, iako mnogo rjeđe.
U situaciji kad neka aplikacija ili klijent pokazuju poruku o grešci u nekom modulu prilikom instalacije ili podizanja, možemo pokušati odregistrirati modul i pokrenuti aplikaciju opet,
regsvr32 /u imemodula.dll
ili naknadno pokušati u sistem uvesti originalnu verziju iz \dllcache direktorija ili pomoću naredbe sfc.exe
ili,
može se dogoditi da je DLL koji je potreban za rad aplikacije u nekom momentu instalacije deaktiviran, te ga je potrebno samo registrirati
regsvr32 imemodula.dll ili regsvr32 "path:\imemodula.dll"
u ovom slučaju DLL datoteka se može nalaziti i na drugom mjestu izvan %systemroot%-a.
Dobra je ideja provjeriti, preko komandno-linijskog alata depends (Dependency Walker), ovisnost ekzgekutabilne datoteke naše problematične aplikacije o sistemskim ili aplikacijskim DLL datotekama, te ih onda eventualno registrirati. Depends.exe će nas obavijestiti o datotekama koje nedostaju ili su oštećene.
Regsvr32.exe učitava datoteku koju želite registrirati ili deregistrirati zajedno sa svim njenim ovisnostima.
Greške prilikom korištenja regsvr32.exe su također moguće.
Evo jednog primjera iz Microsoft Knowledge Basea u kojemu se zahtijeva deregistracija oštećenog modula wuv3is.dll prije nego reinstaliramo originalnu verziju:
http://support.microsoft.com/default.aspx?kbid=241122
241122 WINUP- Invalid Page Fault in 'wuv3is.dll'
a opis korištenja i poruke greške mogu se vidjeti na:
Explanation of Regsvr32 Usage and Error Messages
http://support.microsoft.com/?kbid=249873
Ovdje bih želio naglasiti kako je dobro imati na umu da OLE objekti mogu biti uzrokom neposluha OS-a i aplikacija, te da pomoću ova dva alata možemo normalizirati rad problematične aplikacije, a rješenje tih problema može se izvesti brzo i efikasno.
|