【问题标题】:How to deploy an app using external libraries In IIS如何在 IIS 中使用外部库部署应用程序
【发布时间】:2020-05-09 14:56:35
【问题描述】:

这是我第一次使用 IIS,所以我不太了解它是如何工作的。

我开发了一个 ASP.net c# web 表单应用程序,以便使用 IIS 将其部署在服务器上。我在 Windows 服务器上安装了 Visual Studio,以确保应用程序正常运行,到目前为止没有问题。

当我从 Visual Studio 发布应用程序并将生成的文件系统放入 inetpub/wwwroot 中时...页面加载正常,但是当我尝试需要外部库的应用程序功能时,恰好引发了异常在代码中插入第一个外部库的对象的行中(由日志提供的信息)。

我怀疑一旦部署在 IIS 应用程序上,就没有库的引用或无权访问它们,因为除了将文件系统添加到 depault 应用程序池之外,我没有触及 IIS 内部的任何内容。但是我该如何解决这个问题呢?

这是我从日志中得到的两个错误跟踪:

Retrieving the COM class factory for component with CLSID {ED0EC116-16B8-44CC-A68A-41BF6E15EB3F} failed due to the following error : 80070154 Class not registred (Exception  HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG)).

或其他时间:

Retrieving the COM class factory for component with CLSID  {00024500-0000-0000-C000-000000000046} failed due to the following error : 80070005 Access Denied. (Exception  HRESULT : 0x80070005 (E_ACCESSDENIED)).

提前致谢。

【问题讨论】:

  • 您的应用是否使用 Microsoft Office(例如 Excel)?
  • @Kev 是的,我确实在使用它,但它的库并不是他唯一引起问题的一个,所有外部库都这样做。
  • 你所有的外部库是什么?
  • 好的...首先,请不要尝试将 Excel 等 Office 产品作为 Web 应用程序中的进程外 COM 服务器运行。这是一个糟糕的主意,它们不是为此而设计的,而且体验总是以泪水告终。有第三方库可以更好地完成这项工作:stackoverflow.com/questions/151005/…
  • @Kev 实际上主要的是: Microsoft.Office.Interop.Excel Objets100cLib Objets100Lib 最后两个是业务对象库,用于在称为 Sage 的企业资源规划解决方案上工作。现在来看,与 excel 处理相关的功能给了我 com Access denied 错误,而与业务对象相关的功能返回“类未注册错误”

标签: asp.net iis dll deployment windows-server-2012-r2


【解决方案1】:

应用程序基于您分配给它的池在 IIS 上运行。此池在特定帐户下运行。

所以将此帐户添加到 DCOM 配置中以便能够访问它。

第一步是找到您的池用户。

然后在您的 DCOM 应用程序上为该用户添加权限,以便池可以读取并运行它们。

要查找 DCOM 配置,请转到

Control Panel | Administrative Tools | Component Services

然后打开

Component Services | Computers | My Computer | DCOM Config

在那里找到您使用的应用程序,左键单击打开菜单并选择属性...在那里授予您的池用户权限

【讨论】:

  • 不应鼓励人们尝试将 Excel 等 Office 产品作为 Web 应用程序中的进程外 COM 服务器运行。这是一个糟糕的主意,它们不是为此而设计的,而且体验总是以泪水告终。有第三方库可以更好地完成这项工作。
  • 我已经尝试过了,我找不到池用户,但我在权限中添加了用户:所有用户。我仍然收到相同的错误消息。
  • 编辑:我向所有用户授予了权限,但不仅在访问权限上,我也在执行时这样做了,对象似乎已实例化,我将解决其他问题。我得到的第二条错误消息是注册一个 Com 组件怎么样?
  • @Kev 我知道,我只需要先解锁当前情况,然后再用其他第三方库编写新的代码版本。
  • @Marouane 也许你会调用某种需要用户界面的程序,或者其他无法启动用户界面的库 - 你可以使用 sysinternals 的 Process Monitor 来查看发生了什么。还有对所有人的许可,有些时候“所有人”都不能工作......
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多