【问题标题】:Visual Studio Difference between Local IIS and Express IIS [duplicate]本地 IIS 和 Express IIS 之间的 Visual Studio 区别 [重复]
【发布时间】:2018-03-14 09:59:55
【问题描述】:

我正在尝试使用 microsoft.office.interop.excel 创建 xlsx 文件。

当我在 VS 中使用 IIS express 运行 Web 应用程序时,它运行良好,但是当我在 VS 中使用本地 IIS 运行它时,我得到:

{"正在检索具有 CLSID 的组件的 COM 类工厂 {00024500-0000-0000-C000-000000000046} 由于以下原因而失败 错误:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。"}

我的服务器上出现同样的异常,服务器版本:windows server 2016, IIS版本:10.0.14393.0

注意:DCOMC 配置包含 Microsoft Excel 应用程序。

【问题讨论】:

  • 与 IIS 相比,IIS express 的工作方式略有不同。由于开发需求,IIS Express 在安全性方面更加宽松。您可以切换到在 VS 配置中使用完整的 IIS(用于 Web 项目),然后检查它是否有效。如果没有,请尝试以管理员身份运行 VS,如果仍然无法正常工作,请检查您的 IIS 是如何配置的。希望这会有所帮助。
  • Microsoft Interop 的东西不喜欢以系统用户身份运行。将与 microsoft 交互的东西作为服务运行会很痛苦,而且 IIS 也可能会尝试以系统用户身份运行它。
  • 服务器端办公自动化注定要失败。还有一些微软不支持的东西,blog.lextudio.com/…
  • 老兄,不要关闭问题并将指向您博客的链接作为事实发布。这是不正确的,不要给你更多的答案。

标签: c# asp.net visual-studio iis excel-interop


【解决方案1】:

当您执行 IIS Express 时,池使用您有权访问和启动 Excel 的 Windows 帐户。

默认情况下,本地 IIS 使用 ApplicationPoolIdentity,因此如果您想执行外部程序集,最好的方法是通过您的 windows 帐户(或为此用途创建的帐户)更改池的标识。

【讨论】:

  • 虽然这个答案解释了为什么该应用程序可以在 IIS Express 上运行,但其更改 IIS 配置的建议毫无意义。 Microsoft 根本不支持服务器端 Office 自动化。
  • 几年前我就使用过这个 COM。也许现在不可能,但在 .Net2.0 上是可能的。这不是一个好的做法,因为每次调用都使用此启动一个 excel.exe 进程。上下文消失时应该处理的进程。这个解决方案也有很多内存泄漏。
  • 感谢所有响应者。我通过使用 EPPlus 构建新功能来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2016-11-13
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多