【问题标题】:Unable to Create the instance of COM class using Activator.CreateInstance无法使用 Activator.CreateInstance 创建 COM 类的实例
【发布时间】:2015-10-14 20:13:00
【问题描述】:

我正在尝试使用以下代码创建 com 对象:

Type testlib = Type.GetTypeFromProgID("TestComApp.TestApp.TestClass");
dynamic comObj = Activator.CreateInstance(testlib);

但得到错误:

在 mscorlib.dll 中发生“System.Runtime.InteropServices.COMException”类型的未处理异常

附加信息:检索具有 CLSID {FD909333-3CD0-477F-8A7E-B8045B0B84EC} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154REGDB_E_CLASSNOTREG)。

我已尝试使用 AnyPlatform 、X86、x64 位平台以及用于 32 位和 64 位的 RegAsm 构建项目。

但仍然无法使其正常工作。我已在注册表中验证,并且具有 GUID 的类和 CLSID 存在

【问题讨论】:

  • 使用 SysInternals 的进程监视器。在运行 Regasm.exe 时使用它,您可以准确地看到正在写入的注册表项。并在您运行客户端应用程序时使用它,您可以准确地看到正在读取的密钥。您看到的差异使您有力地引导您解决潜在问题。
  • ProgId 只是注册的一部分。你在 HKCR\CLSID 里有什么?

标签: c# .net com regasm


【解决方案1】:

它开始工作了,一旦我使用 codebase 和 Regasm

cd "C:\Windows\Microsoft.NET\Framework\v4.0.30319"

regasm /codebase C:\DATA\TestComApp\TestComApp\bin\Debug\TestComApp.DLL

我之前在做:

cd "C:\Windows\Microsoft.NET\Framework\v4.0.30319"

regasm C:\DATA\TestComApp\TestComApp\bin\Debug\TestComApp.DLL

【讨论】:

    【解决方案2】:

    我在生产模式(在 IIS 中)的 WCF 项目中遇到了同样的问题。 在开发模式 (Visual Studio) 中不会发生错误。

    对我来说,解决方案是在 IIS -> 应用程序池 -> 高级设置 -> 启用 32 位应用程序中:

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2011-09-09
      • 2017-04-21
      • 1970-01-01
      • 2013-07-18
      • 2017-06-16
      相关资源
      最近更新 更多