Regsvr32, блог на прозорци

Regsvr32 (Microsoft Windows Регистрирайте сървър) - е програма, система, предназначена да се регистрирате и да се отпишете ActiveX контроли. филтърни компоненти (кодеци) и DLL компоненти на система Windows, като направи промени в системния регистър.

DLL (Dynamic Link Library, динамичните връзки библиотеки) - динамично включете набор от съчетания (функции) са логически обединени в едно двоичен файл, който може да се използва повторно / динамично по едно и също време (с помощта) на различните приложения, които изискват да функционират тези функции.

Концепцията на споделена библиотека значително опростява Архитектурата на приложението, тъй като вместо всяка програма да се използва една и съща резервен код, например, диалогови прозорци, по-лесно да го направят в отделен файл (системата на DLL), която предоставя тази функционалност за различни приложения. Ето защо, една характеристика на динамичната библиотека е, че тя може да се използва от няколко приложения, както и системата осигурява присъствие в паметта на само едно копие на един динамичен код библиотека връзка за всички приложения, които съдържат препратки към функциите на библиотеката.
Започвайки с Windows XP, в зависимост от операционната система на малко, regsvr32.exe полезност се намира или само в директорията% SystemRoot на% \ System32 за 32-битови системи, или в папка% SystemRoot на% \% SystemRoot% \ SysWOW64 за 64-битова System32 и ( има две различни версии на програмата). Е инструмент за командния ред, тоест, с други думи, работата с конзолата и могат да бъдат използвани в сценариите.

Значение регистрацията на библиотеки и контроли

По някаква причина, е задължително да се изисква да използвате функциите на DLL в системата за регистрация? Мисля, че това е една аналогия с променлива система път (% PATH%) е подходяща. Ако си спомняте, файловете, които се намират в директории, изброени в променливата PATH%%. Тя може да се управлява от командния ред, без да уточнява пълния път, в противен случай те не може да се управлява от всяка директория система черупка те просто няма да намерите. По аналогия и библиотеки, които съдържат функции, които се използват широко от различни програми, трябва да бъде ", заяви" в системата, в противен случай програмата няма да може да ги намерите. Може да се твърди, че функцията е наречен от образа на изпълнимия файл, Windows буутлоудъра (управител, който е отговорен за разпределението на паметта, свързване на различни функции от изображения с памет и SRN.) Необходимо е да се знае, където можете да заредите библиотека, съдържаща желаната функция.
Но това, което е регистрирано в системата по отношение на DLL? Тя е определена последователност от действия за промяна на различните секции на директорията на системния регистър и файловата система, в резултат на което е "видимостта" на подадените заявления за библиотеката. Ако библиотеката е "страна" (не-система), регистрацията на библиотеката се извършва на етапа на инсталацията на приложението, за поддържане на която е предвидено функции. В повечето случаи, процесът на регистрация самата библиотека се осъществява, като се обадите на външни комунални услуги специализирана система или конкретна поредица от специализирани функции на Windows API.

Често не е необходимо сами (ръчно) за регистриране на DLL, почти винаги това се прави автоматично по време на инсталирането на система / софтуерни компоненти. Необходимостта от ръчна регистрация се случи, като правило, в случай на грешка в системата: проблеми инсталиране / деинсталиране, повреди на програми, или в случай на самостоятелно разработен DLL, което е необходимо да се тестват.

Как да се регистрирате модул

регистрация Алгоритъм библиотека

Не всички DLL може да се регистрира с помощта на regsvr32!

Да видим какво се случва, когато, например, не е дефиниран DllRegisterServer функция:

Как да се регистрирате модул

В този случай, ние виждаме на екрана грешка ". Модулът е зареден, но не е намерена входна точка DllRegisterServer". Но нека да преминем като пряко с процеса на регистрация.

нов метод

Както казахме, използвана функция DllRegisterServer (), за да се регистрирате библиотеката. Тази функция проверява дали 128-битов глобално уникален идентификатор (GUID, Global Уникален ID) на всички обекти COM / ActiveX, намерени в библиотеката и след това регистрира информация за тях в системния регистър. GUID е нищо друго освен 128-битово глобално уникален идентификатор (GUID, Global Уникален ID), идентифицира даден обект клас библиотека. регистрация на обекта е необходимо, тъй като програмите не работят с DLL / OCX / ACX самите файлове, като с обекти, които представляват определен набор от интерфейси.
За целите на регистрацията на DLL използвате следната регистратурата:





  • клон на HKLM \ Software \ Classes \ CLSID в регистрацията на библиотеки от COM-обекти за всички потребители на системата;
  • клон HKCU \ SOFTWARE \ Classes \ CLSID в регистрацията на COM-обекти библиотеки само за текущия потребител;
  • клон на HKLM \ SOFTWARE \ Wow6432Node \ Classes \ CLSID за регистрация на DLL 32-битовата в 64-битова операционна система Windows;






  • HKEY_CLASSES_ROOT (HKCR) съчетава Software \ класове HKEY_LOCAL_MACHINE \ и софтуер \ Класовете HKEY_CURRENT_USER \. и излезе в системата, за да бъдат съвместими с по-старите версии на ООП.

    Ключът за \ CLSID клон HKEY_CLASSES_ROOT е създадена с името на равностойността на РЪКОВОДСТВО. GUID препратка към идентификатора на COM клас, наречен. За да се разграничи идентификациите класа на други идентификатори, за тях с помощта на CLSID име. Един пример за стойността може да бъде оглед низ CLSID. В глобален смисъл, уникалните номера "не се повтарят", и уникална идентификация на компонентите на системата, която ни разказва за уникалността на обект библиотека клас в рамките на системата. Подраздели в тези клонове на системния регистър, могат да бъдат:

    Това означава, че (по подразбиране) стойностите на ключовете съответстват на пълния път на регистрираната библиотеката.

    По този начин, можем да заключим, че процесът на регистрация на библиотеката е да се информират операционната система, че изпълнението на интерфейси, предоставена от обекта със специфичен идентификатор, се намира в съответната преписка.

    Ако е необходимо да промените местоположението на DLL на системата (например, промените местоположението директория), ще отнеме неговата пререгистрация.

    стар метод

    В допълнение към сегашния метод в регистъра има и клон HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDLLs. Мога да се предположи, че става дума за остарелите методи на регистрация на споделен библиотеки DLL, въз основа на отчитане на броя на връзки към библиотеката. Този клон е предназначена за регистрация на библиотеки, които ще се използват от няколко програми в системата? В този бранш има параметри, като например REG_DWORD, които съдържат трите имена пътя, регистрирани в системните библиотеки споделен (например: C: \ Windows \ system32 \ VBAME.DLL). Стойността на параметъра може да варира от 1 до 65535. Фактът, че тази стойност - използва брояч или, както се нарича, броят на връзките. Често този метод е бил използван за запис не-MSI монтажници. Всеки път, подобен на инсталатора собствени записи в библиотеката на системата, която вече е била регистрирана от някой друг (т.е. присъстват в SharedDLLs), тя увеличава използването на тезгяха с 1, а когато (например изтриване) библиотечни проверките , броячът се намалява с 1. тази логика е била извършена в първата версия на Windows, за да се справят с това явление като "DLL Hell". В параметрите на някои библиотеки, можете да видите доста голяма стойност (4096), мисля, че така белязана от решаващо значение за библиотечната система, и на гишето е изкуствено увеличен с оглед на различни потребителски опаковки при отстраняването им, а не по невнимание намален броят на използване на 0 и не изключвайте DLL ,
    В съответствие с всички по-горе, на теория, регистрацията може да се извърши ръчно от себе си, ако знаете какво ключове и стойности, намерени в системния регистър.

    32-битови и 64-битови версии regsvr32

    В момента 64-битовата версия на Windows започва да се използва по-активно. Ако 32-битовите версии на Windows, това е доста прозрачни и имаше само една версия на програмата, на 64-битовите версии на Windows, има два regsvr32 полезност версия:

    • В 64-битова версия на помощната програма -% SystemRoot% \ System32 \ regsvr32.exe (използва по подразбиране, когато стартирате без да се уточнява начинът);
    • Версията на 32-битова на полезността -% SystemRoot% \ SysWOW64 \ regsvr32.exe

    Така че, в система за 64-битова, разработчиците са запазили старата директория именуване система, но поставени там вече за "местните" 64-битови приложения. Това се дължи на съвместимостта на приложенията и намаляване на времето, прекарано в превод на код от 32 до 64-битов Windows. По този начин в 64-битова версия на Windows може да работи както 32-битови и 64-битови версии на програми, съответно, и DLL може да се използва, и 32- и 64-битови.
    Когато стартирате regsvr32 в 64-битова версия на операционната система, за да се регистрирате DLL, вие използвате по подразбиране 64-битова версия на помощната програма.

    За 64-битова версия на Windows има едно златно правило: System32 системната директория е предназначена за стандартните приложения на 64-битови, директория SysWOW64 за 32-битова. Малко не-интуитивен, но това е установен факт. WOW64 (прозорци на Windows 64) - 32-битова подсистема, която работи в 64-битов среда.

    Така че, ако искате да се регистрирате на 32-битова версия на DLL в 64-битова операционна система, а вие имате грешка, можете да направите следното:

    1. Отворете команден прозорец с администраторски права;
    2. Ако е необходимо за регистрация на 32-битови DLL се намира в директория% SystemRoot% на \ System32. да го преместите в папката% SystemRoot% \ SysWOW64;
    3. Изпълнете командата:
      % SystemRoot% \ SysWOW64 \ regsvr32 <полный путь к библиотеке DLL>

    тоест, например:% SystemRoot% \ SysWOW64 \ regsvr32% SystemRoot% \ SysWOW64 \ test.dll

    Ако сте изправени пред предизвикателството да се регистрират 64-битова DLL в 64-битова операционна система:

    1. Отворете команден прозорец с администраторски права;
    2. Ако е необходимо за регистрация на 64-битова версия на DLL се намира в директория% SystemRoot% \ SysWOW64. да го преместите в папката% SystemRoot% на \ System32
    3. Изпълнете командата:
      % SystemRoot% \ System32 \ regsvr32 <полный путь к библиотеке DLL>

    тоест, например:% SystemRoot% \ System32 \ regsvr32% SystemRoot% \ System32 \ test.dll

    синтаксис regsvr32

    Както споменах по-горе, regsvr32 - в командния ред инструмент, така че за практическото използване може да се изчерпи цялата запознат CMD, или да се използва в сценариите.

    В повечето случаи това изисква повишени привилегии, че е локален администраторски права, за да се регистрират DLL.

    regsvr32.exe програма има следните параметри на командния ред:

    Regsvr32 [/ U] [/ S] [/ п] [/ I [: команден-ред]]

    Списък на комунални ключове и описание на действията им се предоставя в следната таблица:

    Eіnaare, pepvaya ppogpamma vydaot съобщение отново: "АЛАРМА ЗА ppedely diapazona". Potom zagpyzhaetcya cmyaty Com ppogpammy, а CAMA Ona СИ pabotaet. Бо vtopoy ppogpamme zagpyzka ppoxodit nopmalno, Nr Okno poicka Po infopmatsii ppogpammy otcytctvyet в последователност, а ВРЕМЕ popytke zapyctit poick vydaotcya съобщение отново: «Run-tіme грешка" 31037 "Грешка loadіng от fіle" и ppogpamma vypybaetcya. В ykazannom БАМИ pazdele peectpa ppicytctvyet само pepvaya ppogpamma. Оба papametpa ( "По ymolchaniyu" и "Рат") vedyt НС papky в ЕХЕ-faylom.

    Светлана, там не може без експеримент. В следствие на това, че системата може да дойде в нестабилна или неизползваеми. Ако не се уплаши, а след това ще можете да:
    1. За да се регистрират в регистъра и на втората програма, подобна на първата. Съответно двата параметри на новия запис би трябвало вече да доведат до работната папка на втората програма. И за двете програми mv14.ocx трябва да е в папката Приложения, които са определени в параметъра път.
    2. За да изтриете всички други вписвания в регистъра на mv14.ocx. Разбира се, би било по-добре да направите резервно копие на системния регистър, преди началото на експеримента. Човек би могъл просто да прекарат дерегистрира чрез regsvr32 с параметър / U, но тя не работи за всички ситуации.

    Аз cmelaya devyshka Ето escho Iicyc govopil: «Той ChELOVEK за Wіndowѕ, а Wіndowѕ за cheloveka" :)))) Ppodelala Oba ekcpepimenta. Pezyltat да cozhaleniyu, Tot Zhe: Либо pabotaet ppogpamma А, Либо - Б. Bmecte - nikak :(