Мы построили .NET-сервер COM/Excel RTD Server (.NET Assembly), который использовался в течение многих лет на разных машинах (т. Е. Мы знаем, что он работает, и наш стандартный метод его установки работает). У нас есть пользователь, который установил этот RTD-компонент на другой машине и у него проблемы с его бесперебойной работой. Я считаю, что проблема связана с Interop.Microsoft.Office.Interop.Excel.dll каким-то образом либо несовместима с этой машиной, либо неправильно зарегистрирована. Вот конкретные детали:Ошибки .NET RTD/COM Excel на одном компьютере пользователя?
Хотя 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 находится в той же папке, что и наш компонент.)
Возможно, это связано с тем, что существует другая версия сборки Interop.Excel, зарегистрированная в GAC этого аппарата? Любые другие возможные области для расследования?
Примечание: Пользователь имеет Windows XP и Excel 2003.
Заранее спасибо за любую помощь (тот же профиль, как и его предыдущей машиной, которая работала.).
Спасибо, Ханс. Мне нравится комментарий: «Лучше всего заколоть машину и перестать тратить время на все». Я желаю, чтобы это было так просто. Это внешние клиенты (не внутренние пользователи) ... Но я думаю, что это, вероятно, будет сообщение, которое я доставляю (в более политическом плане). –
Привет, Ханс - прочитав сообщение, я проверил машину пользователя, и на самом деле у него были записи реестра для IRTDUpdateEvent, а также HKCR \ TypeLib \ {00020813-0000-0000-C000-000000000046} в реестре. Значение IRTDUpdateEvent \ TypeLib \ Version было равным 1,5, и когда я проверил HCKR \ ... \ {0002 ... \ 1.5, он, казалось, был в порядке - имел подразделы с InteropAssembly, а также win32, которые выглядели в порядке. Пользователь запускает Excel 2003. Мы собираемся обновить его до 2007 года. Может быть, это проблема, которую мы разработали и скомпилировали на машинах с использованием Excel 2007? –
IRTDUpdateEvent зарегистрирован только для Office 2007, поэтому я не могу предсказать, что произойдет, когда вы попробуете 2003. Версия библиотеки типов для 2007 года - 1.6.Вы можете потратить больше времени на утилиту ProcMon от SysInternals, вы увидите, что она ищет библиотеку типов. –