64ビットコンピューターでVisual Studio 2012からアプリケーションを実行すると、次のエラーメッセージが表示されます。
次のエラーのため、CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}のコンポーネントのCOMクラスファクトリを取得できませんでした:80040154クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))
VisualStudioでInventor packandgo DLLライブラリを使用しています。
誰もがエラーを知っていますか?
私の問題と解決策
64ビットの2008 R2マシンにインストールした32ビットのサードパーティdllがあります。
プロセス用に32ビットのサードパーティdllを呼び出す.net 4.5フレームワークで作成されたwcfサービスがあります。 「任意の」CPUをターゲットとするビルドプロパティを設定し、64ビットマシンに展開しました。
Iiがwcfサービスを呼び出そうとすると、エラー「80040154 Class not registered(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG)」が発生しました
IiはProcMon.exeを使用してcomレジストリの問題を追跡し、プロセスがHKLM\CLSIDおよびHKCR\CLSIDでレジストリエントリを探していることを特定しました。
Microsoftが32ビットcomコンポーネントを64ビットマシンのパスHKLM\CLSID、HKCR\CLSIDに登録せず、HKLM\Wow6432Node\CLSIDおよびHKCR\Wow6432Node\CLSIDパスにエントリを配置することを知りました。
競合は、64ビットマシンで32ビットプロセスを呼び出そうとする64ビットプロセスであり、HKLM\CLSID、HKCR\CLSIDのレジストリエントリを検索します。解決策は、HKLM\Wow6432Node\CLSIDおよびHKCR\Wow6432Node\CLSIDのレジストリエントリを64ビットプロセスに強制的に確認させることです。
これは、「任意」ではなく「X86」マシンをターゲットとするようにwcfサービスプロジェクトプロパティを構成することで実現できます。
「X86」バージョンを2008 R2サーバーに展開した後、「System.BadImageFormatException:ファイルまたはアセンブリをロードできませんでした」という問題が発生しました
Solutionこのbadimageformatexceptionは、IIS適切なapppoolのApppoolプロパティで 'Enable32bitApplications'を 'True'に設定しています。
問題は、DLLがWindowsレジストリの32ビットバージョンに登録されており、アプリケーションが64ビットバージョンを使用していることです。
解決策:[プロジェクトプロパティ]の[コンパイル]タブに移動し、[高度なコンパイルオプション...]をクリックします。 「ターゲットCPU」をx86に変更し、[OK]をクリックして保存し、再試行します。
出典: http://www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows
VB 6 COM DLL。Net 4 Winformsアプリケーションから呼び出された
使用しているコードのどこかに、Win32 API CoCreateInstance の呼び出しがあり、DLLを動的にロードし、そこからオブジェクトをインスタンス化します。
コンポーネントIDとそのオブジェクトをインスタンス化できるDLLとの間のマッピングは、通常レジストリのHEKY_CLASSES_ROOT\CLSIDにあります。これについてさらに詳しく説明するには、多くのことを説明します WindowsのCOM 。ただし、エラーは、COM guidがレジストリに存在しないことを示しています。
PackAndGo DLL(オートデスクコンポーネント)が何であるかについてはあまり知りませんが、そのコンポーネントまたは指定されたインストーラーに付属するソフトウェアパッケージを単に「インストール」する必要があると思います。 DLLと、コードを実行しようとしているコンピューター上の適切なCOMレジストリキーを持ちます。この製品のsetup.exeを実行します)。
つまり、DLL=をターゲットマシンにコピーするだけでなく、このコンピューターに "Pack and Go"をインストールする必要があると思います。
また、インストールするPack And Goのビルドフレーバー(32または64ビット)に応じて、32ビット対64ビットとして適切なコードをビルドすることを決定してください。
64ビットWindowsマシンでは、COMコンポーネントをHKEY_CLASSES_ROOT\CLSID(64ビットコンポーネント)OR HKEY_CLASSES_ROOT\Wow6432Node\CLSID(32ビットコンポーネント)に登録する必要があります。アプリケーションが32ビットアプリケーションの場合64ビットマシンで実行している場合、COMライブラリは通常Wow64ノードの下でGUIDを探し、アプリケーションが64ビットアプリケーションの場合、COMライブラリはHKEY_CLASSES_ROOT\CLSIDからロードしようとします。正しいプラットフォームをターゲットにしており、正しいバージョンのライブラリ(32/64ビット)がインストールされていることを確認してください。
長い間解決したと思いますが、これは他の貧しい人々の魂を助けるかもしれません。
このエラーは、DLLインストールパッケージでデプロイしているものがDLL参照しているものと異なる場合(これらは異なるIDになります)
当たり前のように聞こえますが、dllに小さな変更を加え、以前にDLLを再登録する自分のマシンにアプリをインストールしていた場合、簡単に発生します。
同じ問題がありました。私は多くの方法を試しましたが、ついに解決策は簡単になりました。解決策:IISを開き、アプリケーションプールで、使用されている.netフレームワークを右クリックします。設定に移動し、「32ビットアプリケーションを有効にする」を「True」に変更します。
32ビットアプリケーションで以下のエラーが発生していました。
エラー:CLSID {4911BB26-11EE-4182-B66C-64DF2FA6502D}のコンポーネントのCOMクラスファクトリの取得は、次のエラーのために失敗しました:80040154クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))。
defaultapplicationpool
inで "Enable32bitApplications
"をtrueに設定すると、IISが機能しました。
この問題があり、かっこで指定されたWindowsレジストリを探していることがわかったときに解決しました。
エラーは1台のコンピューターでのみ発生していたので、私がしなければならなかったことは、それが機能していたコンピューターからレジストリーをエクスポートし、それが欠落しているコンピューターにインストールすることでした。
私は同じ問題に遭遇しました。 Microsoft.Office.Interop.Excel COMコンポーネントのdllの参照を追加しましたが、Officeがシステムにインストールされておらず、コンパイル時エラーが発生しません。アプリケーションを別のシステムに移動して実行しました。正常に動作しました。
私の場合、この問題を引き起こしていたのはシステム環境だったと言えます。