【问题标题】:System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} failedSystem.Runtime.InteropServices.COMException:检索具有 CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} 的组件的 COM 类工厂失败
【发布时间】:2016-05-18 23:56:52
【问题描述】:

我正在运行一个 c# 应用程序并且我正在使用 DSOFile dll。该 DLL 在项目中被引用。我可以在我的开发机器上运行 exe。 但是当我在另一台机器上运行 exe 时,我得到了

未处理的异常:System.Runtime.InteropServices.COMException:检索具有 CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常: 0x80040154 (REGDB_E_CLASSNOTREG))。

不知道为什么我会得到这个。谷歌搜索并将平台目标设置为 x86 但我仍然遇到这个问题。任何帮助都会很棒。

【问题讨论】:

  • 我猜 COM 库没有在另一台计算机上注册。尝试在目标系统上使用具有管理员权限的命令行执行 regsvr32.exe DSOFile.dll
  • 非常感谢 MickyD。在这种情况下,我是否需要在每台运行 exe 的机器上注册这个 COM 库?
  • 谢谢 MickyD。我不记得在我的开发机器上做过这个。这让我想知道我还缺少什么
  • 啊'ol'“它适用于我的机器参数”;) 在不知道 DSOFile 库的作用的情况下,它很可能在你不知道的情况下注册在你的盒子上。也许一些安装程序?不管怎样,看看我下面的建议。

标签: c# interop console-application dsofile


【解决方案1】:

这是我们在问题下方进行的对话的摘要。


80040154 类未注册(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。

这意味着您尝试实例化的 COM 对象是一个未注册 COM 的类。 COM 使用注册表来维护类注册。

尝试使用目标系统上的管理员权限从命令行执行 regsvr32.exe DSOFile.dll

我不记得在我的开发机器上做过这个。这让我想知道我还缺少什么

是的,请尝试以下检查:

快速检查

我建议使用微软的免费工具OleView(通常与 Visual Studio 一起安装)来检查 COM 的所有内容,但如果您没有它,请打开 RegEdit 并查看是否存在以下密钥:

HKCR\CLSID\{58968145-CF05-4341-995F-2EE093F6ABA3}

如果目标机器上不存在,则 DSOFile 未注册。

如果存在,展开上面的键,您应该会看到一个名为 InprocServer32 的子键。此键的 (默认) 值将是 DLL 的路径,在本例中为 DSOFile.dll。

更多

如果你想使用 OleView,请查看:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\

实际位置可能因我怀疑安装的 Visual Studio 或 Windows SDK 版本而异。

运行后,在 Automation Objects 中查找您的类。

如果失败,请查看所有对象

【讨论】:

  • 非常感谢米奇。我会听从你的指示。非常感谢。
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 2011-05-14
  • 2012-02-17
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多