登録されていないCOM例外クラスを解決する方法(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))?


92

COMクラスのインスタンスを作成しようとすると、次のように例外がスローされます

クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))

どうすれば解決できますか?


1
いくつかのコードで詳細を説明できますか?
Xaisoft 2009

10
2つの質問があります。1。Windows 7 x64マシンにCOMコンポーネントをインストール/登録しましたか?2.アプリケーションのターゲットプラットフォームは何ですか。プラットフォームをx86に設定する必要があると思います。「任意のCPU」に設定しないでください。最初にCOMを登録してから、アプリケーションをテストするために実行してください。ドキュメントを参照してください:support.microsoft.com/kb/146219およびRegsvr32の使用法とエラーメッセージの説明
JackWang

ビルドターゲットを「x86」に変更せずに解決しました。リンク内のソリューション:< stackoverflow.com/a/55513690/11310933 >
Sunil Xtha

回答:


48

初期化しようとしているプログラムまたはプロセスがマシンにインストールされていないか、インストールが破損しているか、登録する必要があるようです。

インストール、修復(プログラムの追加と削除を使用)、または登録(Regsvr32.exeを使用)してください。

あなたは私たちがこれ以上あなたを助けるのに十分な情報を提供していません。


4
(RegSrv32.exeとは対照的に)RegSvr32.exeを意味していると考えてください。
windowsgm 2013

60

すべてのアセンブリが正しいアーキテクチャーでコンパイルされていることを確認する必要があります。COMコンポーネントの再インストールが機能しない場合は、x86のアーキテクチャを変更してみてください。


これにより、NAV 2009 R2クライアント(ClassID 50000004-0000-1000-0001-0000836BD2D2)が見つからないプロセスが解決されました。
Vincent Vancalbergh

14

私の問題と解決策

私は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」に設定することです。


複数の質問に同じ回答を投稿しないでください。良い答えを1つ投稿してから、投票またはフラグを立てて、他の質問を重複として閉じます。質問が重複していない場合は、質問に対する回答を調整してください
kleopatra

10

また、初期化時のクラスコンテキストがその例外を作成する可能性があることにも注意してください。INPROC_SERVERとしてコーディングされているオブジェクトがあり、CLSCTX_LOCAL_SERVERとしてCoCreateInstanceを実行しようとした場合も、そのエラーが発生します。

オブジェクトが登録されており、CoCreateInstanceが正しいクラスコンテキストでインスタンスを作成していることを確認する必要があります。


うん、たとえば(の代わりに)をDesktopWallpaper使用して作成しようとすると、エラーが発生します。CLSCTX_INPROCCLSCTX_ALL0x80040154 (REGDB_E_CLASSNOTREG)
user362515

9

IISのWebアプリケーションで64ビットCOMコンポーネントを使用している場合は、アプリケーションプールが32ビットアプリケーションを許可しないように設定されていることを確認してください(32ビットアプリケーションを有効にする:詳細設定でfalse


5

アプリケーションプールの詳細設定で32ビットアプリケーションを有効にすることで機能しました。アプリケーションプールを右クリックし、詳細設定を選択します-32ビットアプリケーションを有効にします。これは誰かを助けるかもしれません。


わたしも。64ビット開発マシン、64ビットテスト、64ビットライブサーバーで使用される32ビットDLL。開発ボックスで問題なく動作しました。テストサーバーとライブサーバーに展開すると、それぞれのIISアプリプールで32ビットアプリが許可され、プールが再起動するまで失敗しました。また、 "Embed Interop Types"(VSの問題のあるdllの設定)をオフにし、 "Copy Local" = trueを設定して、dllが実際に元の形式でサーバーにコピーされていることを確認する必要がありました。
cymorg 2016年

3

クラス(具体的にはそのCLSID)を登録する-たとえば、ここを参照してください。


それはまた、必ずしもクラスの登録ではなく、彼のマシンまたはサーバーにインストールする必要があるオブジェクトかもしれません。
Xaisoft 2009

@Xaisoftでは、「インストール」には通常、「登録」が含まれます。これは、私が指摘したMSDNのURLのとおりです。
Alex Martelli、

3

私の場合

my platform x64

the Dll library(sdk)そしてredistributable packagex64です

そう

  1. ソリューションエクスプローラー navigate to your project

  2. 開いた Properties

  3. change the Platform target from AnyCPU to x64

ここに画像の説明を入力してください


2

この問題を解決した方法は、COMvia を登録することregsvr32でした。

呼び出すCOMが登録されていることを確認してください。

アプリケーションを使用xceedcry.dllしていて、登録していませんでした。登録すると、アプリケーションは正常に動作しました。


2

私の解決策は、IISの相対アプリプールの詳細設定で「32ビットアプリケーションを有効にする」をTrueに変更することでした。

アプリプール

32ビットアプリケーションを有効にする


2

私の場合、クラスは適切に登録され、任意のCPU / 64ビットモードでビルドされました 。

しかし、クラスを使用するアプリケーションのIISアプリケーションプールの[ 32ビットアプリケーションを有効にする]プロパティがTrueに設定されていました

アプリケーションプールの構成と実際に登録されているクラスのアーキテクチャが一致していないため、クラスが見つかりませんでした。

32ビットアプリケーション有効にするをFalseに設定すると、問題が修正されました。 IISアプリプールの設定


1

私にとっては、64ビットのビルド構成を作成する必要がありました。


1

MapWinGisを使用して同じ問題が発生しました。Visual Studio 2015 Windowsフォームプロジェクトで作業しているソリューションを見つけました。プロジェクト->プロパティ->ビルドを右クリックし、構成をすべての構成に設定し、コンボボックスの「プラットフォームターゲット」でx64に設定します。


0

COMを介してC ++クライアントから.Netアセンブリを呼び出すこの問題に遭遇しました。.Netアセンブリが依存しているアセンブリの1つが見つからなかったことがわかりました。私はしばらくの間、1番目のアセンブリの何が問題かを理解しようと取り組みましたが、それは実際には1番目のアセンブリの依存関係の1つでした。C ++クライアントからCoCreateInstance()を呼び出すと、2つの異なるエラーを受け取りました。1つ目は REGDB_E_CLASSNOTREGクラスが登録されていない 2つ目の試行は 0x80131040:見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。

アセンブリの参照が存在することを確認してください。dotPeekを使用して最初のアセンブリを参照し、その参照の1つが欠落していることに気付いたときに、これを発見しました。依存関係の正しいバージョンをフォルダーに配置することで、両方のエラーが解決されました。


0

CPUをターゲットにしてアプリケーションをコンパイルしていたところ、アドビリーダーに古いv10.xがインストールされていて、v11.xアップグレード する必要があるという主な問題が判明しました。これが、この問題を解決する方法です。


0

実行時に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(プロパティウィンドウ内)



0

私は同じ問題に直面しました。いくつかの調査を行った後、私は自分のための修正を見つけました、そしてそれは役に立つかもしれません。この問題は、私の観察した時点での再インストールに関連しているだけでなく、アクセス許可にも依存しています。

手順1:特定のCOMオブジェクトを修復します。

ステップ2:コンポーネントサービス>コンピューター>マイコンピューター> DCOM構成> COMオブジェクトを選択>右クリック>プロパティ>セキュリティタブ>アクセス許可>カスタマイズを選択>編集> IIS_USERを選択(存在しない場合は完全な権限で作成)アクセスして[OK]をクリックします。

[ID]タブに移動> [インタラクティブユーザー]または[このユーザー]を選択できます> [適用]をクリックして[OK]をクリックします。「このユーザー」を選択した場合、そのサーバーに管理特権ユーザーを付与する必要があります

手順3:IISマネージャーを開き、アプリケーションプールを再起動します。

注:必要に応じてサーバーを再起動してください


-1

ここで解決策を見つけ、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

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.