Что на самом деле делает regsvr32 filename.ax? - PullRequest
13 голосов
/ 13 августа 2010
regsvr32 filename.ax

Я вижу, что что-то успешно установлено, но какова вся история?

Ответы [ 3 ]

30 голосов
/ 13 августа 2010

COM , который широко используется в Windows, зависит от регистрации. Компонент будет предоставлять библиотеки типов, интерфейсы и классы. Каждый из них определяется GUID, чтобы уникально назвать их. Компоненты COM также могут определять ProgID, которые являются своего рода ярлыками для громоздких GUID.

Вся эта информация хранится в специальном кусте реестра на компьютере с именем HKEY_CLASSES_ROOT. Используйте RegEdit.exe для просмотра. В частности, вы можете найти библиотеки типов в HKEY_CLASSES_ROOT\TypeLib, интерфейсы в HKEY_CLASSES_ROOT\Interface и классы в HKEY_CLASSES_ROOT\CLSID. Некоторая информация в реестре будет содержать путь к реальной библиотеке DLL с компонентом, позволяющей Windows находить и загружать компонент при запросе.

При установке компонента COM необходимо создать правильную информацию реестра. По соглашению DLL может предоставлять две экспортируемые функции:

При выполнении RegSvr32.exe MyComponent.dll исполняемый файл RegSvr32.exe попытается вызвать DllRegisterServer в MyComponent.dll. Затем предполагается, что DLL создаст все необходимые записи реестра, чтобы разрешить использование компонента.

Аналогичным образом вы можете использовать RegSvr32.exe /u MyComponent.dll для отмены регистрации компонента. Это удалит всю информацию, ранее добавленную в реестр.

Windows сильно зависит от COM, и очень важно, чтобы регистрация COM была актуальной. К сожалению, ничто не мешает вам удалить уже зарегистрированный компонент COM. Это оставит в реестре висячие указатели, указывающие на более не существующую DLL. Вы даже не можете отменить его регистрацию, так как он больше не существует.

Другая проблема возникает, когда два разных приложения требуют разные версии одного и того же компонента. Реестр может указывать только на одну из двух версий, что может привести к сбою одного из приложений.

Microsoft создала исправления для этих проблем. Гораздо лучше предоставить установщик для компонента COM, который может восстановить и удалить компонент, если он был удален. Вы также можете создать параллельную установку одного и того же компонента в разных версиях.

2 голосов
/ 17 августа 2010

Он в основном вызывает вашу dll (в данном случае с именем filename.ax) и вызывает ее метод "DllRegisterServer".

В случае фильтров DirectShow он может «зарегистрировать» эти фильтры в реестре Windows, чтобы DirectShow знал о них.

например: https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L698 звонки https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L631

Хотя есть и более простые версии.

0 голосов
/ 13 августа 2010

regsvr32 регистрирует DLL и EXE-файлы в реестре Windows (обычно это библиотеки типов COM, идентификаторы классов, идентификаторы интерфейсов и т. Д.) Вы можете использовать regedit для навигации по реестру.

...