Regsvr32, blog pe ferestre

Regsvr32 (Microsoft Windows Server Register) - este un utilitar de sistem proiectat pentru a înregistra și a anula controale ActiveX. componente de filtrare (codec-uri) și componente DLL pe un sistem Windows prin efectuarea de modificări în registry.

DLL (Dynamic Link Library, legături dinamice biblioteci) - conectați dinamic un set de rutine (funcții) sunt combinate în mod logic într-un fișier binar unic, care poate fi reutilizat / dinamic încărcate în același timp (folosind) diferitele aplicații care necesită să funcționeze aceste funcții.

Conceptul de bibliotecă partajată simplifică foarte mult arhitectura aplicației, pentru că în loc de fiecare program să utilizeze același cod de rezervă, de exemplu, casetele de dialog, mai ușor să-l facă într-un fișier separat (sistemul de un DLL), care oferă această funcționalitate pentru o varietate de aplicații. Prin urmare, o caracteristică a bibliotecii dinamice este că acesta poate fi utilizat de mai multe aplicații, iar sistemul oferă o prezență în memoria doar o copie a unui cod de dinamic link-ul de bibliotecă pentru toate aplicațiile, care conțin referiri la funcțiile bibliotecii.
Începând cu Windows XP, în funcție de sistemul de operare de biți, de utilitate Regsvr32.exe este situat fie doar în directorul% SystemRoot% \ System32 pentru sistemele pe 32 de biți, sau în folderul% SystemRoot% \% SystemRoot% \ SysWOW64 pentru 64 de biți System32 și ( există două versiuni diferite ale programului). Este un instrument de linie de comandă, adică, cu alte cuvinte, de lucru cu consola si pot fi folosite în scenariile.

Înțeles înregistrarea bibliotecilor și a controalelor

Din anumite motive, este necesar în mod necesar de a utiliza funcțiile DLL în sistemul de înregistrare? Cred că ar fi o analogie cu variabila cale de sistem (% PATH%) este adecvată. După cum vă amintiți, fișierele care sunt localizate în directoarele listate în variabila% PATH%. Acesta poate fi rulat din linia de comandă, fără a specifica o cale completă, în caz contrar acestea nu pot fi rulate de pe orice sistem de coajă de director care pur și simplu nu vor găsi. Prin analogie și bibliotecile care conțin funcții care sunt utilizate pe scară largă de programe diferite, trebuie să fie „a declarat“ în sistem, în caz contrar, programul nu va fi capabil să le găsească. Se poate argumenta că funcția este numit de imaginea fișierul executabil, Windows bootloader (manager, care este responsabil pentru alocarea de memorie, conectarea diferitelor funcții din imagini de memorie și SRN.) Trebuie să știe unde puteți încărca biblioteca ce conține funcția dorită.
Dar ceea ce este înregistrat în sistem în ceea ce privește DLL? Este o succesiune de acțiuni pentru a modifica diferitele secțiuni ale directorului de registru și de fișiere de sistem, rezultatul care este „vizibilitatea“ a cererilor de bibliotecă. În cazul în care biblioteca este o „parte“ (non-sistem), înregistrarea bibliotecii se realizează în etapa a instalației de aplicare, pentru întreținerea căruia îi este destinat funcții. În cele mai multe cazuri, procesul de înregistrare de bibliotecă în sine se realizează prin apelarea utilităților externe ale sistemului de specialitate sau o anumită succesiune de funcții Windows API specializate.

De multe ori, nu este nevoie de tine (manual) pentru a înregistra DLL, aproape întotdeauna acest lucru se face în mod automat în timpul instalării componentelor sistemului / software. Nevoia de înregistrare manuală are loc, de regulă, în cazul unei eventuale erori în sistem: probleme de instalare / dezinstalare, eșecuri de programe, sau în cazul DLL auto-dezvoltate, ceea ce este necesar pentru a testa.

Cum de a înregistra un modul

Înregistrare bibliotecă Algoritm

Nu toate DLL pot fi înregistrate folosind regsvr32!

Să vedem ce se întâmplă atunci când, de exemplu, nu este definită DllRegisterServer funcția:

Cum de a înregistra un modul

În acest caz, vom vedea un ecran de eroare „Modulul este încărcat, dar punctul de intrare DllRegisterServer nu a fost găsit.“ Dar să mergem mai departe cum ar fi, în mod direct la procesul de înregistrare.

metodă nouă

Așa cum am spus, a fost utilizată funcția DllRegisterServer () pentru a înregistra în bibliotecă. Această funcție verifică dacă un 128 de biți identificator unic global (GUID, Global ID-ul unic) a tuturor obiectelor COM / ActiveX, găsite în bibliotecă și, ulterior, înregistrează informații despre acestea în registru. GUID nu este altceva decât un identificator de 128 de biți la nivel global unic (GUID, Global ID-ul unic), identifică o anumită bibliotecă de clasă de obiecte. Înregistrare obiect este necesară, deoarece programele nu funcționează cu DLL / ei înșiși fișiere OCX / ACX, ca și cu obiecte care reprezintă un anumit set de interfețe.
În scopul înregistrării DLL utilizând următoarea ramura de registru:





  • ramură a HKLM \ SOFTWARE \ Classes \ CLSID în înregistrarea bibliotecilor de COM-obiecte pentru toți utilizatorii sistemului;
  • filiala HKCU \ SOFTWARE \ Classes \ CLSID în înregistrarea COM obiecte de biblioteci numai pentru utilizatorul actual;
  • ramură a HKLM \ SOFTWARE \ Wow6432Node \ Classes \ CLSID pentru înregistrarea DLL pe 32 de biți, în 64-bit sistem de operare Windows;






  • HKEY_CLASSES_ROOT (HKCR) combină HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes și HKEY_CURRENT_USER \ Software \ Classes. și a plecat în sistem să fie compatibil cu versiunile anterioare ale COM.

    Ramura HKEY_CLASSES_ROOT cheie \ CLSID este creat cu numele echivalentul a GUID-ului. GUID referire la identificatorul de clasă COM numit. Pentru a distinge ID-urile de clasă ale altor identificatori, pentru a le folosind CLSID numele. Un exemplu de valoare poate fi o vedere CLSID șir. Într-un sens global, numerele unice „nu sunt repetate,“ și de a identifica în mod unic componentele sistemului care ne spune despre unicitatea clasei de obiecte de bibliotecă în cadrul sistemului. Subsecțiunile în aceste ramuri ale registrului pot fi:

    Aceasta este, (implicit) valorile cheilor corespund calea completă a bibliotecii înregistrate.

    Astfel, putem concluziona că procesul de înregistrare a bibliotecii este de a informa sistemul de operare că punerea în aplicare a interfețelor furnizate de obiect cu un anumit identificator, se află în fișierul corespunzător.

    Dacă aveți nevoie pentru a schimba locația DLL pe sistem (de exemplu, modificați locația director), va lua reregistration ei.

    metoda veche

    În plus față de metoda actuală în registru există, de asemenea, o sucursală HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDLLs. Pot să presupun că se referă la metodele învechite de înregistrare a bibliotecilor partajate DLL, bazată pe numărarea numărului de link-uri către bibliotecă. Această ramură este destinat pentru înregistrarea bibliotecilor, care va fi utilizat de mai multe programe de pe sistem? În această ramură există parametri, cum ar fi REG_DWORD, care conțin numele complete de cale înregistrate în sistem partajat bibliotecile (de exemplu: C: \ Windows \ System32 \ VBAME.DLL). Valoarea parametrului poate varia de la 1 la 65535. Faptul că această valoare - utilizarea contra sau, așa cum se numește, numărul de link-uri. De multe ori, această metodă de înregistrare a fost folosit instalatorilor-MSI. De fiecare dată când un instalator similare înregistrările proprii în biblioteca de sistem, care a fost deja înregistrat de altcineva (de exemplu, prezent în SharedDLLs), crește utilizarea contorului de 1, și atunci când (de exemplu, ștergeți) controalele de bibliotecă dintr- , contorul este decrementat cu 1. această logică a fost pusă în aplicare în prima versiune de Windows pentru a face față acestui fenomen ca „DLL Hell“. La parametrii unor biblioteci, puteți vedea o valoare destul de mare (4096), cred că da marcate critic pentru sistemul de bibliotecă, iar contorul este crescut în mod artificial în vederea o varietate de pachete personalizate la îndepărtarea lor, nu a redus din neatenție contorul de utilizare la 0 și nu opriți DLL .
    În conformitate cu toate cele de mai sus, în teorie, înregistrarea poate fi realizată manual de unul singur, dacă știi ce cheile și valorile găsite în registru.

    versiunile pe 32 de biți și 64 de biți regsvr32

    În momentul de față, versiunea pe 64 de biți de Windows a început să fie utilizat mai activ. În cazul în care versiunile pe 32 de biți de Windows, a fost destul de transparentă și nu a fost doar o singură versiune a programului, versiunile pe 64 de biți de Windows, există două regsvr32 versiune de utilitate:

    • Versiunea pe 64 de biți de utilitate -% SystemRoot% \ System32 \ regsvr32.exe (utilizat în mod implicit atunci când executați fără a specifica modul);
    • Versiunea de 32 de biți de utilitate -% Systemroot% \ SysWOW64 \ regsvr32.exe

    Deci, într-un sistem pe 64 de biți, dezvoltatorii au păstrat vechiul directorul de sistem de denumire, dar există deja aplicații plasate pe 64 de biți „native“. Acest lucru se datorează compatibilitatea aplicațiilor și a reduce timpul petrecut pe traducerea de cod dintr-un 32 la 64 de biți pentru Windows. Astfel, în versiunea pe 64 de biți de Windows poate rula ambele versiuni pe 32 de biți și 64 de biți ale programelor, respectiv, și DLL pot fi folosite, și 32 și 64 de biți.
    Când executați regsvr32 în versiunea pe 64 de biți a sistemului de operare pentru a înregistra DLL, pe care îl utilizați versiunea implicită pe 64 de biți de utilitate.

    Pentru Windows 64-bit există o regulă de aur: sistem de directorul System32 este proiectat pentru aplicații native pe 64 de biți, director SysWOW64 pentru 32 de biți. Bit non-intuitiv, dar este faptul stabilită. WOW64 (ferestre pe ferestre 64) - un subsistem pe 32 de biți care se execută în mediul pe 64 de biți.

    Deci, dacă doriți să înregistrați versiunea pe 32 de biți a DLL în sistemul de operare pe 64 de biți, și aveți o eroare, puteți face următoarele:

    1. Deschideți un prompt de comandă cu drepturi de administrator;
    2. În cazul în care este necesar pentru înregistrarea DLL pe 32 de biți este situat în directorul% SystemRoot% \ System32. mutați-l în folderul% SystemRoot% \ SysWOW64;
    3. Rulați comanda:
      % SystemRoot% \ SysWOW64 \ regsvr32 <полный путь к библиотеке DLL>

    adică, de exemplu:% SystemRoot% \ SysWOW64 \ regsvr32% SystemRoot% \ SysWOW64 \ test.dll

    Dacă se confruntă cu provocarea de a înregistra DLL pe 64 de biți în sistemul de operare pe 64 de biți:

    1. Deschideți un prompt de comandă cu drepturi de administrator;
    2. În cazul în care este necesar pentru înregistrarea DLL pe 64 de biți este situat în directorul% SystemRoot% \ SysWOW64. mutați-l în folderul% SystemRoot% \ System32
    3. Rulați comanda:
      % SystemRoot% \ System32 \ regsvr32 <полный путь к библиотеке DLL>

    adică, de exemplu:% SystemRoot% \ System32 \ regsvr32% SystemRoot% \ System32 \ test.dll

    sintaxa regsvr32

    Așa cum am menționat mai sus, regsvr32 - un instrument de linie de comandă, astfel încât pentru utilizarea practică poate fi rulat din toate CMD familiare, sau pot fi utilizate în scenariile.

    În cele mai multe cazuri, este nevoie de privilegii ridicate, care este un drepturi de administrator locale pentru a înregistra DLL.

    Regsvr32.exe de utilitate are următorii parametri de linie de comandă:

    Regsvr32 [/ u] [/ s] [/ n] [/ i [: linie_cmd]]

    Listă de chei de utilitate și descriere a acțiunilor lor este prevăzută în tabelul de mai jos:

    Eіnaare, pepvaya ppogpamma mesaj vydaot din nou: "ALARMĂ za ppedely diapazona". Potom zagpyzhaetcya cmyaty Com ppogpammy, un Cama tu ne pabotaet. Bo vtopoy ppogpamme zagpyzka ppoxodit nopmalno, Nr Okno poicka Po infopmatsii ppogpammy otcytctvyet în secvența, o TIMPUL popytke zapyctit poick vydaotcya mesaj din nou: «eroare Run-tіme '31037' Eroare loadіng de la fіle“ și vypybaetcya ppogpamma. B ykazannom Bami pazdele peectpa ppicytctvyet numai pepvaya ppogpamma. Oba papametpa ( "Po ymolchaniyu" și "Rath") vedyt nA papky c EXE-faylom.

    Svetlana, nu se poate face fără experiment. În consecință că sistemul poate veni instabil sau inoperabil. Daca nu este speriat, atunci sunt capabili să:
    1. Pentru a înregistra în registru și al doilea program similar cu primul. Prin urmare, cei doi parametri ai noii înregistrare ar trebui să conducă deja într-un dosar de lucru al doilea program. Pentru ambele programe mv14.ocx ar trebui să fie în dosarul Aplicații, care sunt desemnate în parametrul Path.
    2. Pentru a șterge toate celelalte intrări din registrul mv14.ocx. Desigur, ar fi mai bine pentru a face o copie de rezervă a registry înainte de experiment. S-ar putea cheltui doar radieze prin regsvr32 cu parametrul / u, dar aceasta nu funcționează pentru toate situațiile.

    I cmelaya devyshka, Lo escho Iicyc govopil: «El chelovek pentru Wіndowѕ, un Wіndowѕ pentru Cheloveka“ :)))) Ppodelala Oba ekcpepimenta. Pezyltat la cozhaleniyu, tot Zhe: Libo pabotaet ppogpamma A, Libo - B. Bmecte - nikak :(