我有一个COM互操作程序集,我想从.NET应用程序检查我要创建的组件是否已安装在计算机上。
如果没有安装,我想提供一条很好的错误消息。
将实例化放入try-catch对我来说不是一个好的解决方案,因为我想在缺少的安装和可能发生的其他错误之间进行讨论。
我的想法是检查 HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Interface 路径下的注册表中是否存在具有COM类ID的节点。但是有更好的方法吗?
答案 0 :(得分:6)
不幸的是,我认为最好的方法是尝试实例化它。签入注册表并不能保证组件实际上在那里(例如,文件可能在注册后被删除或移动)。
答案 1 :(得分:2)
除了the problem that Eyvind mentions之外,在执行注册表检查时还需要考虑其他一些事项:
上述两种情况都不常见,但仍然很清楚。
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搜索/查找。