.NET 0x80040154 (REGDB_E_CLASSNOTREG):检索具有 CLSID XXXX 的组件的 COM 类工厂
Posted
技术标签:
【中文标题】.NET 0x80040154 (REGDB_E_CLASSNOTREG):检索具有 CLSID XXXX 的组件的 COM 类工厂【英文标题】:.NET 0x80040154 (REGDB_E_CLASSNOTREG): Retrieving the COM class factory for component with CLSID XXXX.NET 0x80040154 (REGDB_E_CLASSNOTREG):检索具有 CLSID XXXX 的组件的 COM 类工厂 【发布时间】:2021-12-13 12:56:29 【问题描述】:我正在尝试运行 COM.Scanner 项目,但引发了以下异常:
检索具有 CLSID 9F8D4F16-0F61-4A38-98B3-1F6F80F11C87 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。
就像Interop.CoreScanner
是一个.NET 程序集,我使用regasm
来注册COM 对象,但错误仍然存在。
我来读这篇好文章post,但没有一个答案能解决问题。
这是Corflags的信息:
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.81.0
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
生成的带有regasm
和/regfile
选项的.reg
文件是:
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\9F8D4F16-0F61-4A38-98B3-1F6F80F11C87\InprocServer32]
"Class"="CoreScanner.CCoreScannerClass"
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll"
[HKEY_CLASSES_ROOT\CLSID\9F8D4F16-0F61-4A38-98B3-1F6F80F11C87\InprocServer32\1.0.0.0]
"Class"="CoreScanner.CCoreScannerClass"
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll"
环境:
操作系统:Windows 10 (x64) Visual Studio 2015问题
这闻起来像是注册表中缺少条目,但我不知道是哪个。 如果我的方法正确,为什么regasm
无法生成缺少的注册表项?
【问题讨论】:
从不、从、从注册互操作库。您必须使用 Regsvr32.exe 或(最好)供应商的安装程序注册本机 COM 组件。如果您没有该安装程序,请使用电话,看起来您需要致电 Zebra。如果您确实拥有它,那么您使用 Regasm.exe 破坏了安装,您将不得不重新安装。 如果我不希望客户端安装 SDK 我需要一个本机 COM 组件并将其注册到 Regsvr32.exe? 再次,使用电话与供应商交谈并寻求具体的安装建议。最好要求一个可以与您自己的安装程序集成的合并模块。 显然我对 COM 的了解并不是最先进的,那么任何原生组件的最终消费者都可以说 X 语言需要在 X 上编译的 Interop 库吗?作为桥梁?自从我发表这个问题以来,我非常相信你会澄清@Hans 的疑虑。感激不尽。 我最近遇到了同样的问题。它要求我找到一台程序成功运行的机器,然后检查注册表中的密钥并在其上运行 regsvr32.exe:[***.com/questions/7197506/… 【参考方案1】:seems 缺少的组件与 Motorolas EMDK SDK 一起安装。安装 SDK 应该可以解决您的问题。
注册互操作程序集不会让您更进一步,因为互操作程序集只是一个包含 COM 组件类型定义的库,因此您可以使用静态类型和早期绑定来编译 C# 代码。实际需要注册的是底层的 COM 组件。要注册它,如果 COM 组件是用 .NET 编写的,则仅当实际的 COM 组件时才使用 regasm.exe
。否则你需要使用经典的regsvr32.exe
(或使用组件供应商的安装程序)。
【讨论】:
我用那个链接解决了。同时安装 Scanner SDK here 解决问题。以上是关于.NET 0x80040154 (REGDB_E_CLASSNOTREG):检索具有 CLSID XXXX 的组件的 COM 类工厂的主要内容,如果未能解决你的问题,请参考以下文章
HRESULT:0x80040154 用于注册的 COM 对象
求救 没有注册类(异常来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG))
Fixed: Failed to create VirtualBox COM object REGDB_E_CLASSNOTREG (0x80040154)
没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
PageOffice打开word时出现Office运行时错误,部分系统文件可能丢失或已损坏.(错误代码:0x80040154)
PageOffice打开word时出现Office运行时错误,部分系统文件可能丢失或已损坏.(错误代码:0x80040154)