COMクラスのインスタンスを作成しようとすると、次のように例外がスローされます
クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))
どうすれば解決できますか?
COMクラスのインスタンスを作成しようとすると、次のように例外がスローされます
クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))
どうすれば解決できますか?
回答:
初期化しようとしているプログラムまたはプロセスがマシンにインストールされていないか、インストールが破損しているか、登録する必要があるようです。
インストール、修復(プログラムの追加と削除を使用)、または登録(Regsvr32.exeを使用)してください。
あなたは私たちがこれ以上あなたを助けるのに十分な情報を提供していません。
すべてのアセンブリが正しいアーキテクチャーでコンパイルされていることを確認する必要があります。COMコンポーネントの再インストールが機能しない場合は、x86のアーキテクチャを変更してみてください。
私の問題と解決策
私は64ビットの2008 R2マシンにインストールした32ビットのサードパーティdllを持っています。
.net 4.5フレームワークで作成されたwcfサービスを使用して、32ビットのサードパーティdllを呼び出します。これで、ビルドプロパティが「任意」のCPUをターゲットに設定され、64ビットマシンにデプロイされました。
wcfサービスを呼び出そうとすると、「80040154クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG)」
ここで、ProcMon.exeを使用してcomレジストリの問題をトレースし、プロセスがエントリのないHKLM \ CLSIDおよびHKCR \ CLSIDでレジストリエントリを探していることを確認しました。
Microsoftは32ビットのcomコンポーネントを64ビットマシンのHKLM \ CLSID、HKCR \ CLSIDのパスに登録せず、HKLM \ Wow6432Node \ CLSIDおよびHKCR \ Wow6432Node \ CLSIDパスにエントリを配置することを知りました。
これで、競合は64ビットプロセスが64ビットマシンで32ビットプロセスを呼び出そうとして、HKLM \ CLSID、HKCR \ CLSIDでレジストリエントリを検索します。解決策は、64ビットプロセスがHKLM \ Wow6432Node \ CLSIDおよびHKCR \ Wow6432Node \ CLSIDのレジストリエントリを参照するように強制する必要があることです。
これは、「Any」ではなく「X86」マシンをターゲットとするようにwcfサービスプロジェクトプロパティを設定することで実現できます。
'X86'バージョンを2008 R2サーバーにデプロイした後、「System.BadImageFormatException:ファイルまたはアセンブリを読み込めませんでした」という問題が発生しました
このbadimageformatexceptionの解決策は、適切なアプリケーションプールのIIS Apppoolプロパティで「Enable32bitApplications」を「True」に設定することです。
また、初期化時のクラスコンテキストがその例外を作成する可能性があることにも注意してください。INPROC_SERVERとしてコーディングされているオブジェクトがあり、CLSCTX_LOCAL_SERVERとしてCoCreateInstanceを実行しようとした場合も、そのエラーが発生します。
オブジェクトが登録されており、CoCreateInstanceが正しいクラスコンテキストでインスタンスを作成していることを確認する必要があります。
DesktopWallpaper使用して作成しようとすると、エラーが発生します。CLSCTX_INPROCCLSCTX_ALL0x80040154 (REGDB_E_CLASSNOTREG)
アプリケーションプールの詳細設定で32ビットアプリケーションを有効にすることで機能しました。アプリケーションプールを右クリックし、詳細設定を選択します-32ビットアプリケーションを有効にします。これは誰かを助けるかもしれません。
クラス(具体的にはそのCLSID)を登録する-たとえば、ここを参照してください。
COMを介してC ++クライアントから.Netアセンブリを呼び出すこの問題に遭遇しました。.Netアセンブリが依存しているアセンブリの1つが見つからなかったことがわかりました。私はしばらくの間、1番目のアセンブリの何が問題かを理解しようと取り組みましたが、それは実際には1番目のアセンブリの依存関係の1つでした。C ++クライアントからCoCreateInstance()を呼び出すと、2つの異なるエラーを受け取りました。1つ目は REGDB_E_CLASSNOTREGクラスが登録されていない 2つ目の試行は 0x80131040:見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。
アセンブリの参照が存在することを確認してください。dotPeekを使用して最初のアセンブリを参照し、その参照の1つが欠落していることに気付いたときに、これを発見しました。依存関係の正しいバージョンをフォルダーに配置することで、両方のエラーが解決されました。
実行時にCOMクラス、つまり「クラスが登録されていない例外」を使用して同じ問題に遭遇しました。私にとっては、app.configファイルに移動して「startup」要素と「supportedRuntime」要素を次のように変更することで解決できました。
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
詳細については、http://stackoverflow.com/questions/1604663/をご覧ください。
そしてここhttps://msdn.microsoft.com/en-us/library/w4atty68(v=vs.110).aspx
Visual Studio 2017を実行していることに注意してください。ターゲットcpu = x86 Embed Interop Type = true(プロパティウィンドウ内)
.Netフレームワークのディレクトリに移動し、それぞれのdllをRegsvr32.exe ホワイトスペースdllパスに登録します。
私は同じ問題に直面しました。いくつかの調査を行った後、私は自分のための修正を見つけました、そしてそれは役に立つかもしれません。この問題は、私の観察した時点での再インストールに関連しているだけでなく、アクセス許可にも依存しています。
手順1:特定のCOMオブジェクトを修復します。
ステップ2:コンポーネントサービス>コンピューター>マイコンピューター> DCOM構成> COMオブジェクトを選択>右クリック>プロパティ>セキュリティタブ>アクセス許可>カスタマイズを選択>編集> IIS_USERを選択(存在しない場合は完全な権限で作成)アクセスして[OK]をクリックします。
[ID]タブに移動> [インタラクティブユーザー]または[このユーザー]を選択できます> [適用]をクリックして[OK]をクリックします。「このユーザー」を選択した場合、そのサーバーに管理特権ユーザーを付与する必要があります
手順3:IISマネージャーを開き、アプリケーションプールを再起動します。
注:必要に応じてサーバーを再起動してください
ここで解決策を見つけ、mmc -32ツールを実行します(dcomcfgではありません)。
32ビットOfficeを搭載した64ビットシステムでは、次のことを試してください。
Start
Run
mmc -32
File
Add Remove Snap-in
Component Services
Add
OK
Console Root
Component Services
Computers
My Computer
DCOM Config
Microsoft Excel Application
