【发布时间】:2011-12-11 05:01:41
【问题描述】:
我们构建了一个已广泛使用多年的 RTD 服务器组件。 (它是使用 VS 2008、.NET 3.5 Target Runtime 构建的。)今天有用户报告收到以下异常:
System.InvalidCastException:无法转换类型的 COM 对象 'System.__ComObject' 到接口类型 'Microsoft.Office.Interop.Excel.IRTDUpdateEvent'。这个操作 失败,因为对 COM 组件的 QueryInterface 调用 由于 IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' 的接口失败 出现以下错误:不支持此类接口(异常来自 HRESULT:0x80004002(E_NOINTERFACE))。在 Microsoft.Office.Interop.Excel.IRTDUpdateEvent.UpdateNotify() 在 EZomsRTDServer.RTDServer.NotifyExcel()
他昨天跑得很好。该问题似乎是由于他安装了一个新应用程序导致他安装了 .NET 4 更新。 (他已经安装了 .NET 4,所以不确定这个更新是什么。)用户通过回滚到昨天的还原点(仍然在运行 .NET 4)解决了这个问题。但是我们需要了解在安装过程中可能发生了什么导致 COM 兼容性问题。 (他没有接触 Excel 或我们的 RTD 应用程序)。
其中一个安装是否有可能将 IRTDUpdateEvent 的 Guid 用于其他一些 COM 类?
【问题讨论】:
-
嗯,不,.NET 更新不会导致 COM 转换错误。与 Office PIA 或注册表混淆的应用程序安装程序当然可以。
-
@Hans:诊断这个问题的正确方法是搜索注册表,看看是否有其他类注册了异常中打印的 IID ({A43788C1-D91B-11D3-8F39-00C04F3651B8} )?
-
这在另一个帖子中得到了回答:stackoverflow.com/questions/10200154/…