【问题标题】:Can't instantiate COM object from ASP.NET MVC app无法从 ASP.NET MVC 应用程序实例化 COM 对象
【发布时间】:2012-05-09 02:18:47
【问题描述】:

正如标题所说,我想从 ASP.NET MVC 应用程序中实例化一个 COM 对象,如下所示:

dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(progID));

但它会抛出以下 ComException:

检索具有 CLSID 的组件的 COM 类工厂 {16542E4F-4594-4B97-922D-BE9C478F93BB} 由于以下原因而失败 错误:800aea5f HRESULT 异常:0x800AEA5F。

相同的代码适用于具有以下构建配置的 Winforms 应用程序:Platform: x86Platform target: x86

我为 mvc 应用和我使用 COM 对象的程序集设置了与 Winforms 应用相同的构建配置。

我使用的是 Windows 7、IIS 7.5、ASP.NET v4.0 应用程序池,启用 32 位应用程序 True,网站在具有管理员权限的用户下运行。

您有什么建议可以帮助解决这个问题?

【问题讨论】:

  • 即使您启用了 32 位模式,这并不意味着您的 .NET 代码运行在 32 位。所以我猜你是从 64 位 .NET 代码调用 32 位 COM 吗?
  • @YvesR 正如我在问题中所说,我为 mvc 应用程序和我使用 COM 对象的程序集设置了构建配置:Platform: x86Platform target: x86,因此它应该正在运行32 位代码。
  • 您是否正确设置了 DCOM 权限以便可以从网站启动 com+ 对象?我的意思是您在网站上运行的帐户的默认启动设置 (dcomcnfg.exe)。在 win2k8 机器上设置 IIS 时总是需要调整设置。
  • 检查 Environment.Is64BitProcess 是否为假,以确保您使用的是 32 位代码...
  • 800AEA5F 听起来确实像是权限问题。当您说“网站在具有管理员权限的用户下运行”时,您指的是应用程序池的默认用户吗?

标签: c# asp.net-mvc-3 com


【解决方案1】:

将应用程序池的默认用户设置为具有管理员权限的用户

【讨论】:

    【解决方案2】:

    @david.s 我不知道如何添加截图作为评论,所以我将其设置为答案。 由于您已经设置了所有 32 位的东西并且无法调用 DLL,因此可能是权限问题。

    调用 dcomcnfg.exe 并检查设置(抱歉,只有德国服务器,但应该可以):

    您必须在设置更改后重置您的 IIS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2011-08-17
      • 2013-07-31
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多