.NET / COMexception与IRTDUpdateEvent

我们build立了一个已被广泛使用多年的RTD服务器组件。 (它是使用VS 2008,.NET 3.5 Target Runtime构build的。)今天,用户报告了以下exception:

System.InvalidCastException:无法将types为“System .__ ComObject”的COM对象转换为接口types“Microsoft.Office.Interop.Excel.IRTDUpdateEvent”。 此操作失败,因为IID为“{A43788C1-D91B-11D3-8F39-00C04F3651B8}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:没有此类接口支持(exception来自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类?

我认为你可能会得到这个错误的原因是因为你正在一个线程以外的其他线程调用UpdateNotify。

http://weblogs.asp.net/kennykerr/Rtd8

这里描述一个解决这个问题的好方法。

https://stackoverflow.com/a/24422419/949779

这是在另一个post回答: 一个用户的机器上的.NET RTD / COM Excel互操作错误?

这个问题似乎与Excel 2003的计算机如何创build此COM对象有所不同,而与Excel 2007的计算机如何创build它不同。