.NET 0x80040154 (REGDB_E_CLASSNOTREG):检索具有CLSID {XXXX}的组件的COM类工厂时出错

3

我尝试运行COM.Scanner项目,但遇到以下异常:

检索具有 CLSID {9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} 的组件的 COM 类工厂失败,原因是以下错误:80040154 类未注册 (来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))。

Interop.CoreScanner 一样,这是一个 .NET 程序集,我使用 regasm 注册 COM 对象,但仍然出现错误。

我阅读了这篇好的帖子,但没有任何答案解决了问题。

这是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

生成的 .reg 文件使用 regasm/regfile 选项,内容如下:
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不能生成缺失的注册表项?

3
永远不要注册Interop库。您必须注册本机COM组件,使用Regsvr32.exe或(最好是)供应商的安装程序。如果您没有该安装程序,则需要使用电话,看起来您需要致电Zebra。如果您确实拥有它,则使用Regasm.exe会破坏安装,您将不得不重新安装。 - Hans Passant
如果我不想要客户安装SDK作为要求,我需要一个本地的COM组件,并使用Regsvr32.exe进行注册吗? - Jose Rodriguez
再次使用电话与供应商沟通,并询问具体的安装建议。要求一个可以与您自己的安装程序集成的合并模块是最好的选择。 - Hans Passant
显然,我对COM的了解并不是最先进的。那么,任何以X语言为例的本机组件的最终使用者需要一个编译好的X交互库作为桥梁吗?自从我发出这个问题以来,我一直非常相信你会帮我澄清疑虑,@Hans。感激不尽。 - Jose Rodriguez
我最近遇到了完全相同的问题。这需要我找到一台程序成功运行的机器,然后检查注册表中的密钥并在其上运行regsvr32.exe:[https://dev59.com/7mw05IYBdhLWcg3wgyDI] - Matthew Alltop
1个回答

3

看起来缺失的组件已经与摩托罗拉的EMDK SDK一起安装。安装SDK应该可以解决您的问题。

注册交互程序集并不能使您更进一步,因为交互程序集只是一个包含COM组件类型定义的库,以便您能够使用静态类型和早期绑定编译C#代码。需要注册的实际内容是底层的COM组件。要注册它,只有在实际的COM组件是.NET编写的时候,您才会使用regasm.exe。否则,您需要使用经典的regsvr32.exe(或使用组件供应商的安装程序)。


1
我用那个链接解决了问题。此外,安装扫描仪SDK 在这里 也解决了这个问题。 - Jose Rodriguez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接