.local protiv DLL Pakla

Ako je vaš posao ikada uključivao petljanje sa Windows DLL bibliotekama ili ne-daj-bože COM aplikacijama, sigurno ste iskusili ono što se zove DLL Hell – problem koji se dešava kada deljeni DLL instalacijom nove aplikacije bude pregažen sa lošom (starijom) verzijom i time napravi vašu aplikaciju nestabilnom ili totalno neupotrebljivom.

Microsoft je naravno svestan ovih problema, pa je (prvi) pokušaj za rešavanje ovog problema (ili za rešavanje dela problema): Dynamic-Link Library Redirection – praktično, prvo mesto na kome će LoadLibrary pokušati da locira traženi DLL je lokalni direktorijum same aplikacije.

Ovim se rešavaju problemi sa deljenim “statičkim” tj. ne-COM DLL-ovima; problem sa COM-ovima je bez obzira na lokaciju (možete imati više COM servera na raznim lokacijama na disku) registracija COM servera se nalazi samo na jednom mestu (u Registry bazi) i poslednja registracija će biti važeća.

Da bi ovo razrešio, MS uvodi od Windows 2000 potpunu redirekciju, koja se sada odnosi i na delimično poređenje imena fajla (praktično se odnosi i na imena COM server aplikacija) – ako za vašu app.exe kreirate datoteku app.exe.local (sadržaj same datoteke nije bitan), Windows će sve (obične DLL ili COM datoteke) prvo tražiti u direktorijumu aplikacije – ovo je najbolji način da izbegnete bilo kakve probleme sa verzijama DLL-ova: sve što vam treba držite kod sebe.

(ovo je iskorišćeno kao osnova za više IE instalacija na istoj mašini – a must za bilo kog ozbiljnog web developera)

Od Windows XP/2003 ponašanje je malo promenjeno – ako je app.exe.local datoteka, ponašanje ostaje kao gore opisano; međutim ako je app.exe.local direktorijum, traženje DLL-ova će prvo početi od tog direktorijuma – jako zgodan način za lokalizaciju deljenih datoteka.

Nadgradnja svega ovoga je upotreba manifesta ili Isolated Applications and Side By Side Assemblies (praktično kopija metodologije upotrebljena u .Net svetu), ali kako ovo nisam praktično probao, iskoristite gornji link za više detalja.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.