读取 .NET 库是否已注册 COM

Read whether .NET library is COM registered

我有一个要为 COM Interop 注册的库:

%Windir%\Microsoft.NET\Framework\<version>\regasm MyTest.dll
%Windir%\Microsoft.NET\Framework64\<version>\regasm MyTest.dll

现在在这样做之前,我只想查明该库是否已经为COM Interop 注册,而不更改系统配置。 我该怎么做?另外,我想知道是否已经为 COM Interop 注册了同一个库的其他版本(新的和旧的)。

官方 regasm 手册页现在显示任何仅输出库是否已注册的参数。

您可以通过编程方式检查注册表(就像任何 COM 服务器,而不仅仅是 .NET),例如,这是在名为 ' net2.dll",已使用 /codebase 参数注册:

对于非 .NET COM 服务器,重要的部分是 HKCR\CLSID\<your CLSID>\InprocServer32 key 的默认值,它指向公开函数以创建声明的 COM 对象的 dll。

对于 .NET class,此值必须设置为 mscoree.dll(这是所有 .NET 安装的一部分),然后同样重要的是键 AssemblyClass.

请注意,我在此处提供了 C# 代码中 RegAsm 的等效示例:,您也可以反过来使用它来确定哪些是重要的键。