我们构建了一个已广泛使用多年的 RTD 服务器组件。(它是使用 VS 2008、.NET 3.5 目标运行时构建的。)今天有用户报告收到以下异常:
System.InvalidCastException:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Excel.IRTDUpdateEvent”。此操作失败,因为 IID 为“{A43788C1-D91B-11D3-8F39-00C04F3651B8}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 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 类?