Ansamblu alăturat - Side-by-side assembly

Tehnologia de asamblare side-by-side ( SxS sau WinSxS pe Microsoft Windows ) este un standard pentru fișierele executabile în Windows 98 Ediția a doua , Windows 2000 și versiunile ulterioare ale Windows care încearcă să atenueze problemele (cunoscut sub numele de „ DLL Hell ”) care apar din utilizarea bibliotecilor de legături dinamice (DLL-uri) în Microsoft Windows. Astfel de probleme includ conflicte de versiune, DLL-uri lipsă, DLL-uri duplicate și înregistrare incorectă sau lipsă. În paralel, Windows stochează mai multe versiuni ale unui DLL înWinSxSdin directorul Windows și le încarcă la cerere. Acest lucru reduce problemele de dependență pentru aplicațiile care includ un manifest alăturat .

Microsoft Visual C ++ 2005 și 2008 , cu toate SxS încadrate + C biblioteci de rulare . Cu toate acestea, bibliotecile runtime din Visual C ++ 2010 nu mai folosesc această tehnologie; în schimb, acestea includ numărul de versiune al unei DLL în numele fișierului său, ceea ce înseamnă că versiunile diferite ale unei DLL vor fi tehnic complet diferite acum.

SxS este, de asemenea, baza tehnologică pentru activarea COM fără înregistrare . Numai serverele COM în proces pot fi activate în acest fel.

Operațiune

O aplicație care folosește SxS trebuie să aibă un manifest . Manifestele sunt de obicei o secțiune încorporată în fișierul executabil al aplicației, dar pot fi, de asemenea, un fișier extern. Când sistemul de operare încarcă aplicația și detectează prezența unui manifest, încărcătorul DLL al sistemului de operare este direcționat către versiunea DLL corespunzătoare celei listate în manifest. Dacă nu există niciun manifest, încărcătorul DLL încarcă o versiune implicită a tuturor dependențelor DLL. Dacă DLL este un server COM, trebuie să aibă un manifest propriu pentru ca activarea fără înregistrare să aibă succes.

În Windows Vista și versiunile ulterioare,sxstrace.exe poate ajuta la diagnosticarea eșecurilor la pornirea aplicațiilor din cauza configurării greșite SxS.

Dacă un utilizator dorește să suprascrie ansamblurile specificate de manifest (de exemplu, în cazul patch-urilor de securitate aplicate unei biblioteci), un fișier de configurare a editorului poate redirecționa ansamblurile la nivel global. Semnăturile digitale pot asigura legitimitatea unei astfel de redirecționări.

Formatul manifest

Manifestul aplicației este reprezentat intern ca XML . Urn asociat cu manifestele SxS este " urn: scheme-Microsoft-com: asm.v1 ".

Mai multe alte tehnologii Microsoft recente, cum ar fi ClickOnce, utilizează același format manifest.

Exemplu de manifest

Următorul este un exemplu de manifest pentru o aplicație care depinde de un DLL de execuție C.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Contextele de activare

Un manifest ca cel de mai sus este analizat într-un context de activare de încărcătorul SxS. Există o serie de contexte de activare pentru fiecare fir sau fibră. Un API permite manipularea programatică a acestor contexte. Poate fi necesar ca o bibliotecă ( DLL ) să-și schimbe contextul de activare, de exemplu dacă necesită o versiune specifică a altei biblioteci pentru consum propriu, în loc să utilizeze contextul de activare al apelantului său. Acest tip de problemă se numește uneori poluare (context de activare). Pentru a preveni poluarea contextului său de activare, un DLL poate avea un manifest încorporat ca resursă , care este analizat atunci când DLL este încărcat. Acest manifest trebuie să fie la resursa id 2 din fișierul imagine pentru ca încărcătorul să îl găsească.

WinSxS (magazin de componente Windows)

Începând cu Vista, sistemul de operare Windows utilizează WinSxS pentru componentele sale de bază. Fișierele sistemului de operare dinwinsxsdirectorul este conectat din locațiile lor obișnuite din structura directorului Windows. Un fișier dintr-un subdirector dinwinsxs poate fi conectat din mai multe locații (de ex System32director și directoare de aplicații). Windows Explorer contorizează dublu spațiul pe disc ocupat de aceste fișiere. Acest lucru poate fi demonstrat folosind programul de linie de comandă fsutil. Există, de asemenea, unele extensii Explorer terță parte pentru a afișa numărul de linkuri.

Cu toate acestea, nu toate fișierele din winsxssunt proiectate în acest fel pentru fișierele sistemului de operare „live”. De exemplu, după instalarea unor actualizări Windows, versiunile vechi de fișiere înlocuite de actualizări sunt păstrate în continuarewinsxsdeși nu mai sunt conectate în directoarele Windows „live”. Acest lucru permite dezinstalarea în siguranță a actualizărilor.

Datorită importanței sale ridicate, începând cu Vista winsxsdirectorul este deținut de serviciul Trusted Installer SID. În mod implicit, nici măcar administratorii nu își pot modifica conținutul (fără a prelua mai întâi proprietatea). Dezinstalarea aplicațiilor nu eliberează imediat spațiu înwinsxsdirector; spațiul pentru ansamblurile neutilizate este colectat în timp de către serviciul de instalare.

Deși nu este documentat oficial, algoritmul pentru generarea numelor de directoare care se află în interiorul winsxsdirectorul a fost făcut public pe blogul unui angajat MSDN Microsoft. Algoritmul a fost schimbat în tranziția de la XP la Vista.

Windows 7 include instrumentul Windows AIK Deployment Image Servicing and Management (DISM) care poate elimina fișierele utilizate de actualizările de sistem de operare înlocuite folosind serviciul de lucru Trusted Installer, fără a fi nevoie să reporniți sau să demontați sistemul; actualizările post-SP1 adaugă curățarea Windows Update la instrumentul Curățare disc (cleanmgr.exe) și instrumentul descărcabil de actualizare a sistemului (CheckSUR) care poate repara erorile de stocare a componentelor și poate înlocui fișierele corupte sau lipsă ale sistemului de operare cu versiuni bune cunoscute. Windows 8 integrează capacitatea de reparare a instrumentului DISM, care este acum capabil să copieze fișiere OS valide din Windows Update sau o imagine WIM offline , precum și să reseteze magazinul de componente pentru a conține doar cele mai recente versiuni ale componentelor sistemului de operare. Windows 10 rulează sarcina automată pentru a curăța magazinul de componente.

Avantaje

  • Pentru aplicațiile care au fost construite cu SxS, pot coexista mai multe aplicații care depind de diferite versiuni ale aceluiași DLL. Acest lucru este în contrast cu mediile DLL non-SxS în care o DLL originală într-un folder de sistem partajat poate fi suprascrisă prin instalarea ulterioară a unui alt program care depinde de o versiune diferită a aceluiași DLL.
  • Formatarea XML a manifestului este lizibilă de om și, prin urmare, facilitează dezvoltatorii să determine dependențele unei aplicații și versiunile acestora.

Dezavantaje

  • În Windows XP, o eroare în sxs.dllprovoacă corupția grămezii, ducând la blocarea aplicației. Această problemă nu este rezolvată de niciun service pack XP. Utilizatorii trebuie să instaleze manual o actualizare adecvată.
  • Consum de spațiu pe disc aparent considerabil mai mare, chiar dacă majoritatea conținutului winsxssunt doar link-uri suplimentare suplimentare către fișiere care există în altă parte.
  • winsxsdirectorul și jurnalele Windows Update pot deveni corupte pe măsură ce cresc în dimensiune, deoarece actualizările de securitate adaugă mai multe versiuni noi ale componentelor de sistem critice în magazin. În Windows Vista nu există nicio modalitate acceptată de a reduce semnificativ dimensiunea fișieruluiwinsxs director.

Spatiu pe disc

In timp ce winsxs directorul este extrem de mare și conține mai multe versiuni ale multor fișiere, există unele fișiere în altă parte în folderul Windows (de ex System32) care sunt legături directe către fișierele din winsxsdirector. Astfel, programele care estimează dimensiunea folderului Windows trebuie să fie atenți să nu adauge dimensiunea legăturilor dure suplimentare la un fișier după ce unul a fost deja numărat.

DIR și Explorer nu reușesc să verifice legăturile dure și, prin urmare, pot număra același fișier de mai multe ori, adăugând incorect la utilizarea percepută a discului. Utilizarea discului raportată de aceste două programe este ca și cum fiecare legătură dură ar fi un fișier real.

De la Windows 8.1, instrumentul DISM poate fi utilizat pentru a analiza depozitul de componente și a raporta dimensiunea sa reală.

Referințe

linkuri externe