我们构建了一个.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.(与之前使用的机器相同的配置文件。)
提前感谢您的帮助。
答案 0 :(得分:4)
界面 IID'{A43788C1-D91B-11D3-8F39-00C04F3651B8}
这是IRTDUpdateEvent接口。它确实在HKCU \ Interfaces中有一个声明标准编组的条目。这需要一个类型库,LIBID是{00020813-0000-0000-C000-000000000046}。
错误消息告诉您的是该计算机上的注册表缺少注册表项HKCR\TypeLib\{00020813-0000-0000-C000-000000000046}
或其子项之一。这可能是因为它安装了旧版本的Office,但这很明显。只是普通的注册表损坏是此类事故的主要原因。最好扔掉机器并让它停止浪费每个人的时间。如果由于某种原因这是不切实际的,请重新安装Office。尝试修复注册表项应该是你的最后选择,这种损害很少被隔离。
答案 1 :(得分:1)
您实际上可以通过在与Excel相同的线程上调用UpdateNotify来解决此问题。 请参阅:https://stackoverflow.com/a/27006281/949779