检测是否安装了COM组件的最佳方法是什么

时间:2008-11-18 12:25:01

标签: .net com

我有一个COM互操作程序集,我想从.NET应用程序检查我要创建的组件是否已安装在计算机上。

如果没有安装,我想提供一条很好的错误消息。

将实例化放入try-catch对我来说不是一个好的解决方案,因为我想在缺少的安装和可能发生的其他错误之间进行讨论。

我的想法是检查 HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Interface 路径下的注册表中是否存在具有COM类ID的节点。但是有更好的方法吗?

5 个答案:

答案 0 :(得分:6)

不幸的是,我认为最好的方法是尝试实例化它。签入注册表并不能保证组件实际上在那里(例如,文件可能在注册后被删除或移动)。

答案 1 :(得分:2)

除了the problem that Eyvind mentions之外,在执行注册表检查时还需要考虑其他一些事项:

  • 在HKCU \ Software \ Classes中有(部分)COM注册是可能的(不常见,但可能),所以你也必须检查它。
  • 还有Registration-free COM,你在注册表中找不到任何东西,但仍然可以实例化COM对象......

上述两种情况都不常见,但仍然很清楚。

Eyvind的情况可能是您经常遇到的情况:有人从磁盘上删除您的COM服务器而不先取消注册。

答案 2 :(得分:1)

Type.GetTypeFromProgID("MyProgID") != null

答案 3 :(得分:0)

您还可以在try / catch块中实例化要检查的com类的对象,以便在catch块中警告您的用户。直截了当的解决方案,我同意。

检查注册表对我来说似乎是最合理的方法,因为未注册的com组件是没用的。

答案 4 :(得分:0)

您可以使用iTripoli Type Library Viewer - free。使用上述内容,打开有问题的 EXE / DLL 。然后,您将发现 GUID 。打开 regedit ,转到KEY:HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID。 使用上述GUID搜索/查找