Подтвердить что ты не робот

Что делает regsvr32 filename.ax на самом деле?

regsvr32 filename.ax

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

4b9b3361

Ответ 1

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

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

ex: 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

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

Ответ 2

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-компонента, который может восстановить и удалить компонент, если он был удален. Вы также можете создавать бок о бок установку одного и того же компонента в разных версиях.

Ответ 3

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