【Windows】COM组件注册时写入的注册表信息

之前只是有零散的概念,这次把这些信息都组织起来,备忘。
COM组件注册的时候,会往注册表中写入下面这几类信息:

  • Interface
  • Class
  • Type Library
  • AppID
  • ProgID
    因为HKEY_CLASSES_ROOT\下的键是从HKLM_Software\Classes\映射过去的,所以这两个地方都能找到(如果是32位组件的话,就要多一级WOW6432Node)

Interface

接口的信息会写入到HKEY_CLASSES_ROOT\Interface{Interface GUID}中
一般有两个子key:ProxyStubClsid32和TypeLib
看名知其意,这两个子key就是代理dll和类型库的信息

Class

COM类的信息会写入到HKEY_CLASSES_ROOT\CLSID{Class GUID}
这里写入的是关键信息,有下面几个子key:

  • InprocServer32 (dll的路径和线程模型,如果是server的话,这里为LocalServer32)
  • ProgID (字符串形式的接口名,方便JS这样的脚本使用,免得使用GUID这样的形式)
  • TypeLib (类型库)
  • VersionIndependentProgID (版本无关的接口名)
  • Programmable

TypeLibrary

类型库的信息会写入到HKEY_CLASSES_ROOT\TypeLib{TypeLib GUID}
这里写入的是对应的组件dll路径
这里有个疑惑,构建时生成的tlb信息是放到注册表中还是dll的资源段,像js、vb等脚本语言是如何找到并加载这些类型库信息的?

AppID

注册表写入位置:HKEY_CLASSES_ROOT\AppID{组件文件名|{AppID GUID}}
写入内容:AppID的GUID,GUID对应的AppID,这个GUID好像是自动生成的,一般用不到

ProgID

注册表写入位置:HKEY_CLASSES_ROOT{带版本号和不带版本号的ProgID}
写入内容:对应的CLSID

你可能感兴趣的:(【Windows】COM组件注册时写入的注册表信息)