我们在各种机器上构建了一个已使用多年的 .NET COM/Excel RTD 服务器(.NET 程序集)(即我们知道它可以工作,并且我们安装它的标准方法也可以工作)。我们有一个用户在另一台机器上安装了这个 RTD 组件,并且在让它顺利运行时遇到了问题。我相信这个问题与 Interop.Microsoft.Office.Interop.Excel.dll 与这台机器不兼容,或者注册不正确有关。以下是具体细节:
尽管 RTD 链接在某种程度上可以正常工作,但我们看到我们的应用程序经常记录此错误:
RTDServer.NotifyExcel(): Error notifying Excel, ex=System.InvalidCastException:
Unable to cast COM object of type 'System.__ComObject' to interface type
'Microsoft.Office.Interop.Excel.IRTDUpdateEvent'. This operation failed because
the QueryInterface call on the COM component for the interface with
IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' failed due to the following error:
Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).
at Microsoft.Office.Interop.Excel.IRTDUpdateEvent.UpdateNotify()
at EZomsRTDServer.RTDServer.NotifyExcel()
当我在用户机器上进行故障排除时,我检查了我们的组件是否在 COM 中正确注册。我们运行这个命令来向 COM 注册我们的组件:
C:\EZomsRTD\regasm EZomsRTDServer.dll /codebase "c:\EZomsRTD\EZomsRTDServer.dll"
C:\EZomsRTD\regasm EZomsRTDServer.dll /tlb
在用户的机器上运行这些命令会产生这个 regasm 错误:
Type library exporter warning: Referenced type is defined
in managed component, which is imported from a type library
that could not be loaded because it was not registered
(type: 'Microsoft.Office.Interop.Excel.IRtdServer'; component:
'C:\EZomsRTD\Interop.Microsoft.Office.Interop.Excel.dll').
Assembly exported to 'C:\EZomsRTD\EZomsRTDServer.tlb', and the type
library was registered successfully
(文件:Interop.Microsoft.Office.Interop.Excel.dll 与我们的组件在同一个文件夹中。)
这是否可能是由于在这台机器的 GAC 中注册了另一个版本的 Interop.Excel 程序集?还有其他可能需要调查的领域吗?
注意:用户有 Windows XP 和 Excel 2003。(与他以前工作的机器相同的配置文件。)
提前感谢您的帮助。