以编程方式确定是否安装了COM库(.DLL)

在C#中是否有一种编程方式来确定是否已安装特定的COM DLL? 或者这是扫描classId的注册表的问题?

我通常做的(如果我再次需要这样做的话)会尝试创建一个你知道在COM库中的类的对象实例 – 通过ProgID或GUID – 并检查失败。

尝试创建它,如果没有,则处理错误。

在Win32下,如果未安装, CoCreateInstance将返回REGDB_E_CLASSNOTREG (包括IIRC,如果已注册,则删除实现它的dll / exe)。

在.NET下生成的COM互操作程序集会抛出一些错误(需要检查一下,没有方便的代码来测试哪种exception类型)。 注意。 如果缺少互操作程序集,则会将其视为缺少程序集,可能导致应用程序加载错误。