.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)