29

64 ビット コンピューターで Visual Studio 2012 からアプリケーションを実行すると、次のエラー メッセージが表示されます。

CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} を持つコンポーネントの COM クラス ファクトリの取得は、次のエラーが原因で失敗しました: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))

VisualStudio で Inventor packandgo dll ライブラリを使用しています。

誰がエラーが何であるか知っていますか?

4

11 に答える 11

50

私の問題と解決策

  1. 64 ビットの 2008 R2 マシンにインストールした 32 ビットのサードパーティ dll があります。

  2. プロセス用に32ビットのサードパーティdllを呼び出す.net 4.5フレームワークで作成されたwcfサービスがあります。これで、ビルド プロパティを「任意の」CPU をターゲットに設定し、64 ビット マシンにデプロイしました。

  3. Ii が wcf サービスを呼び出そうとすると、エラー「80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG)」

  4. ここで、Ii は ProcMon.exe を使用して com レジストリの問題を追跡し、プロセスが HKLM\CLSID および HKCR\CLSID でエントリのないレジストリ エントリを探していることを特定しました。

  5. Microsoft は 32 ビット com コンポーネントを 64 ビット マシンのパス HKLM\CLSID、HKCR\CLSID に登録せず、HKLM\Wow6432Node\CLSID および HKCR\Wow6432Node\CLSID パスにエントリを配置することを知りました。

  6. 現在、競合は、64 ビット マシンで 32 ビット プロセスを呼び出そうとする 64 ビット プロセスであり、HKLM\CLSID、HKCR\CLSID のレジストリ エントリを検索します。解決策は、HKLM\Wow6432Node\CLSID および HKCR\Wow6432Node\CLSID のレジストリ エントリを 64 ビット プロセスに強制的に参照させることです。

  7. これは、「任意」ではなく「X86」マシンを対象とするように wcf サービス プロジェクト プロパティを構成することで実現できます。

  8. 「X86」バージョンを 2008 R2 サーバーにデプロイすると、「System.BadImageFormatException: ファイルまたはアセンブリを読み込めませんでした」という問題が発生しました。

  9. この badimageformatexception の解決策は、適切な apppool の IIS Apppool プロパティで 'Enable32bitApplications' を 'True' に設定することです。

于 2015-09-08T14:42:09.680 に答える
1

64 ビット Windows マシンでは、COM コンポーネントは HKEY_CLASSES_ROOT\CLSID (64 ビット コンポーネント) または HKEY_CLASSES_ROOT\Wow6432Node\CLSID (32 ビット コンポーネント) に登録する必要があります。アプリケーションが 64 ビット マシンで実行されている 32 ビット アプリケーションである場合、COM ライブラリは通常、Wow64 ノードで GUID を検索し、アプリケーションが 64 ビット アプリケーションである場合、COM ライブラリは HKEY_CLASSES_ROOT\CLSID からロードしようとします。正しいプラットフォームをターゲットにしており、正しいバージョンのライブラリ (32/64 ビット) がインストールされていることを確認してください。

于 2013-08-02T21:37:36.520 に答える