regsvr32 filename.ax实际上做了什么?

时间:2010-08-13 08:03:09

标签: directshow regsvr32

regsvr32 filename.ax

我只是看到它说安装成功了,但整个故事是什么?

3 个答案:

答案 0 :(得分:30)

在Windows中广泛使用的

COM依赖于注册。组件将提供类型库,接口和类。其中每个都由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组件提供安装程序要好得多,如果组件已被删除,则可以修复和卸载该组件。您还可以在不同版本中创建相同组件的并行安装。

答案 1 :(得分:2)

它基本上调用你的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 :(得分:0)

regsvr32将DLL和EXE注册到Windows注册表中(通常是COM类型库,类ID,接口ID等)。您可以使用regedit导航注册表。