gpt4 book ai didi

c# - .NET RTD/COM Excel 互操作错误在一个用户的机器上?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:50 25 4
gpt4 key购买 nike

我们构建了一个 .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

在用户机器上运行这些命令会产生这个重气错误:

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 与我们的组件位于同一文件夹中。)

这是否可能是因为在 native 的 GAC 中注册了另一个版本的 Interop.Excel 程序集?还有其他可能需要调查的领域吗?

注意:用户有 Windows XP 和 Excel 2003。(与他以前工作的机器相同的配置文件。)

在此先感谢您的帮助。

最佳答案

interface with IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}

这是 IRTDUpdateEvent 接口(interface)。它确实在 HKCU\Interfaces 中有一个条目声明标准编码器。这需要一个类型库,LIBID 是 {00020813-0000-0000-C000-000000000046}。

错误消息告诉您的是,该机器上的注册表缺少注册表项 HKCR\TypeLib\{00020813-0000-0000-C000-000000000046} 或其子项之一。这可能是因为它安装了旧版本的 Office,但这是显而易见的。只是简单的注册表损坏是造成此类事故的主要原因。最好扔掉这台机器,让它不再浪费大家的时间。如果由于某种原因不可行,请重新安装 Office。尝试修复注册表项应该是您最后的选择,这种损坏很少是孤立的。

关于c# - .NET RTD/COM Excel 互操作错误在一个用户的机器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com