在C#中,是否有一种编程方式可以确定特定的COM DLL是否已安装?或者这是扫描类ID的注册表的问题?
在C#中,是否有一种编程方式可以确定特定的COM DLL是否已安装?或者这是扫描类ID的注册表的问题?
通常我做的事情(如果需要再次这样做)是尝试创建一个已知在COM库中的类的对象实例 - 通过ProgID或GUID - 并检查是否失败。
尝试创建它,并在无法创建时处理错误。
在Win32下,如果未安装(包括已注册但实现它的dll/exe已被删除),CoCreateInstance
将返回REGDB_E_CLASSNOTREG
。
在.NET下,生成的COM互操作程序集将抛出一些错误(需要检查这一点,没有方便的代码来测试异常类型)。注意。如果缺少互操作程序集,则会将其视为缺少程序集,可能导致应用程序加载错误。