2012-04-17 35 views
1

私たちは、さまざまなマシンで長年使用されてきた.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(。働いていた彼の前のマシンと同じプロファイル)任意の助けを事前に

感謝しています。

答えて

4

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

これはIRTDUpdateEventインターフェイスです。実際には、HKCU \ Interfacesに標準マーシャラを宣言するエントリがあります。タイプライブラリが必要なLIBIDは{00020813-0000-0000-C000-000000000046}です。

エラーメッセージは、そのコンピュータのレジストリに、レジストリキーHKCR\TypeLib\{00020813-0000-0000-C000-000000000046}またはそのサブキーの1つがないことを示しています。これは、古いバージョンのOfficeがインストールされていることが原因である可能性がありますが、それは明らかです。このような事故の主な原因は、レジストリの損傷だけです。マシンをチャックしてみんなの時間を無駄にしないようにするのが最善です。それが何らかの理由で実用的でない場合は、Officeを再インストールしてください。レジストリキーを修正しようとするのが最後の選択です。この種の被害はめったに分離されません。

+0

ありがとう、ハンス。私はそのコメントを愛しています "マシンをチャックしてみんなの時間を無駄にするのをやめるのが最善です。"私はそれが簡単なところで欲しい。これらは社外のクライアント(社内ユーザーではない)です...しかし、おそらくそれが(もっと政治的に)提供するメッセージになると思います。 –

+0

こんにちは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を使用するマシンで開発してコンパイルした問題かもしれません。 –

+0

IRTDUpdateEventはOffice 2007でのみ記述されているため、2003年に何が起こるか予測できません。2007年のタイプライブラリバージョンは1.6です。SysInternalsのProcMonユーティリティで時間を無駄にすることができます。タイプライブラリを検索することができます。 –

関連する問題