如果管理员用户已注销,服务器上的 Excel 应用程序将无法工作

Add*_*ddy 2 excel iis-7 excel-interop windows-server-2008-r2

我有一个 ASP.NET 应用程序,它使用 Microsoft intrope 程序集来读取、写入和修改 excel 文件,它在服务器计算机上使用 Excel 2013。如果我以管理员身份登录到服务器机器,应用程序工作正常,但是当我注销时,应用程序无法初始化 Excel 应用程序。这是例外。

System.Runtime.InteropServices.COMException (0x8000401A)
Run Code Online (Sandbox Code Playgroud)

应用程序在带有 MS Excel 2013 32 位的 Windows Server 2008R2 上运行我无法找出这种行为的原因。这是关于 COM 对象安全选项还是与 IIS 权限有关?

Phy*_*dha 5

InteropServices 类打开一个(不可见的)Excel 实例来完成它的工作。Excel 不能作为 Windows 服务运行,需要由登录用户实例化。

“Microsoft 目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)自动化 Microsoft Office 应用程序,因为 Office 可能表现出不稳定的行为和/ 或在此环境中运行 Office 时出现死锁。” 有关详细信息,请参阅此页面:Office 支持Office 服务器端自动化的注意事项

如果您仍想保留互操作服务,请尝试将其更改为以交互式用户身份运行:

  • 打开组件服务(开始 -> 运行 -> MMC comexp.msc /32)
  • 找到组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> Microsoft Excel 应用程序
  • 右击,选择属性
  • 转到身份选项卡并选择交互式用户
  • 如果这不起作用,您可以尝试手动输入用户凭据

当然,您也可以切换到另一个框架来读取文件。SO:如何在不使用 Microsoft.Office.Interop.Excel 库的情况下在 C# 中读取 excel 文件