私たちは、さまざまなマシンで長年使用されてきた.NET COM/Excel RTDサーバー(.NETアセンブリ)を構築しました(つまり、動作することがわかっており、標準的なインストール方法が機能します)。このRTDコンポーネントを別のマシンにインストールし、スムーズに機能するように問題を抱えているユーザーがいます。 Interop.Microsoft.Office.Interop.Excel.dllに関する問題は、このマシンと互換性がないか、または不適切に登録されていると考えられます。.NET RTD/COM Excelユーザーのコンピュータ上のInteropエラー?
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(。働いていた彼の前のマシンと同じプロファイル)任意の助けを事前に
感謝しています。
ありがとう、ハンス。私はそのコメントを愛しています "マシンをチャックしてみんなの時間を無駄にするのをやめるのが最善です。"私はそれが簡単なところで欲しい。これらは社外のクライアント(社内ユーザーではない)です...しかし、おそらくそれが(もっと政治的に)提供するメッセージになると思います。 –
こんにちはHans - あなたの記事を読んだ後、私はユーザーのマシンをチェックし、実際には彼は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です。SysInternalsのProcMonユーティリティで時間を無駄にすることができます。タイプライブラリを検索することができます。 –