向 COM 注册程序集

可以运行名为 程序集注册工具(Regasm.exe) 的命令行工具,以注册或注销程序集以用于 COM。 Regasm.exe 向系统注册表添加有关该类的信息,以便 COM 客户端可以透明地使用 .NET Framework 类。 该 RegistrationServices 类提供等效的功能。

必须先在 Windows 注册表中注册托管组件,然后才能从 COM 客户端激活它。 下表显示了 Regasm.exe 通常会添加到 Windows 注册表的键。 (0000000 表示实际 GUID 值)。

GUID DESCRIPTION 注册表项
CLSID 类标识符 HKEY_CLASSES_ROOT\CLSID\{000…000}
IID 接口标识符 HKEY_CLASSES_ROOT\Interface\{000…000}
LIBID 库标识符 HKEY_CLASSES_ROOT\TypeLib\{000…000}
编程标识符 编程标识符 HKEY_CLASSES_ROOT\000…000

在 HKCR\CLSID\{0000...0000} 键中,默认值设置为类的 ProgID,并添加了两个新的命名值:“Class”和“Assembly”。 运行时从注册表中读取程序集值,并将其传递给运行时程序集解析程序。 程序集解析程序会根据程序集信息(如名称和版本号)尝试查找程序集。 若要使程序集解析程序找到程序集,程序集必须位于以下位置之一:

  • 全局程序集缓存(必须为强名称程序集)。

  • 在应用程序目录中。 从应用程序路径加载的程序集只能从该应用程序访问。

  • 沿 /codebase 选项指定的文件路径到 Regasm.exe。

Regasm.exe 还会在 HKCR\CLSID\{0000…0000} 键下创建 InProcServer32 密钥。 键的默认值设置为初始化公共语言运行时 (Mscoree.dll) 的 DLL 的名称。

检查注册表项

COM 互作提供一个标准类工厂实现,用于创建任何 .NET Framework 类的实例。 客户端可以调用 DllGetClassObject 托管 DLL 来获取类工厂并创建对象,就像使用任何其他 COM 组件一样。

关于 InprocServer32 子项, 出现在传统 COM 类型库中的对 Mscoree.dll 的引用表示公共语言运行时创建托管对象。

另请参阅