【问题标题】:IIS and IISExpress with COM libraries带有 COM 库的 IIS 和 IISExpress
【发布时间】:2020-09-15 15:23:02
【问题描述】:

我的 Web 应用程序使用 COM 库,我使用以下代码:

Type headType = Type.GetTypeFromProgID("Eapi.Head");
dynamic head = null;
head = Activator.CreateInstance(headType);

而且我在理解工作 IIS 方面遇到了一些问题。当我在 VisualStudio 中调试我的 webapp 时,运行 IISExpress 并且一切正常。但在 IIS 上发布项目后,应用程序找不到 COM 库。

HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)

IIS 在我开发项目的同一台计算机上。

我注册这个 dll 有两种方式:

C:\WINDOWS\system32>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\WINDOWS\system32>cd ..
C:\Windows>cd SysWOW64
C:\Windows\SysWOW64>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\Windows\SysWOW64>

【问题讨论】:

  • 应该是 32/64 位问题,按照所述注册两次对我来说没有意义 - 您仍将注册其中一个位。您应该能够在 IIS 池设置中切换位数(切换“启用 32 位应用程序”高级设置)。
  • @RomanR. 天哪!是的!是工作。我的错。我第三天解决了这个问题,不知道“出了什么问题”。非常感谢!

标签: c# iis com


【解决方案1】:

当涉及到0x80040154 REGDB_E_CLASSNOTREG 并且您确定您注册了 COM 服务器时,可能的问题是 32/64 位不匹配。

无论您使用哪个 regsvr32,it would register in-process COM server with the bitness of the DLL

IIS 应用程序池有自己的位数设置,当两者不匹配时,您的进程内 COM 服务器将变得不可用。

典型的解决方案是分别为其他位数构建DLL并注册,或者更改IIS应用程序池位数以达到匹配,see instructions here

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多