无法使用Excel.Application在ASP classic中打开Excel工作簿

时间:2017-03-27 16:30:05

标签: excel vbscript asp-classic com

我有一台Windows 2016 Server,我已经安装并激活了Office 2013 64bit。

我有一个经典的ASP应用程序试图打开这样的Excel工作簿:

<%
Set appExcel = CreateObject("Excel.Application")

appExcel.Workbooks.Open("C:\intranet\web\Libro1.xlsx")

%>

我知道微软不鼓励这种Office自动化,但这是我继承的遗留应用程序,必须设法使其在Windows 2016上运行。

如果我将这段代码作为VBS脚本执行,则没有问题,但如果我尝试将其作为ASP页面执行,我会得到:

  

Microsoft Office Excel错误'800a03ec'Microsoft Office Excel无法访问文件'C:\ intranet \ web \ Libro1.xlsx'。
  有几个可能的原因:
  •文件名或路径不存在   •该文件正由另一个程序使用。 (...)

我已经放弃了所有建议的原因,我还检查过如果我真的使用不存在的文件,则错误信息不同。

我正以用户“Administrator”(我的西班牙语安装中的Administrador)运行我的ASP应用程序池。

我已在组件服务中的Microsoft Excel DCOM配置条目的权限的所有三个部分中为每个人授予了权限。

我已在操作系统和办公室软件包中检查了已安装的更新。

我的想法已经用完,任何合理的线索都会受到欢迎。

2 个答案:

答案 0 :(得分:0)

在IIS中设置网站的建议

设置IIS网站时需要考虑的事项

  • 匿名访问帐户
  • 应用程序池
  • NTFS权限

设置匿名帐户

  • 方法一 - 使用ApplicationPoolIdentity代替IUSR

      

    ApplicationPoolIdentityIIS AppPool\<AppPoolAccounts>安全组中相应IIS_IUSRS之一的特殊术语。

    原因是它将安全上下文绑定到应用程序池,而不是让匿名帐户以IUSR运行,而应用程序池以ApplicationPoolIdentity运行,从而留下两个安全上下文来管理。

  • 方法二 - 使用自定义帐户作为应用程序池的标识

    要获得更多控制权,请在“应用程序池高级设置”中使用自定义帐户代替ApplicationPoolIdentity。借用方法一匿名帐户应该设置为ApplicationPoolIdentity,因此现在只需要管理一个安全上下文。

    此方法相对于使用IUSR的主要好处是您知道自定义帐户的密码,而IIS控制IUSR密码使用它代替ApplicationPoolIdentity作为应用程序池标识很麻烦。

分配NTFS权限

  

警告: UAC (用户帐户控制)可以在“Admin Approval Mode”中运行时修改NTFS权限,请确保设置User Account Control: Run all administrators in Admin Approval ModeFalse下的本地组策略中设置为Computer settings\Windows settings\Security settings\Local policies\Security options

根据将匿名帐户添加到IIS网站所使用的方法,应该在网站根文件夹中添加两个帐户之一;

  • 方法一 - IIS_IUSRS(阅读许可)
  • 方法二 - 自定义帐户(读取权限)

在基本级别,网站根文件夹应包含以下权限;

| User Account       | Permission            | Notes
| ------------------ | --------------------- | ---------------------
| Administrators     | Full Control          | For File System access.
| <IIS Anonymous>    | Read & Execute        | Either IIS_IUSRS or a Custom Account.
  

不继承权限

     

建议在网站根文件夹上禁用继承以停止向下传播父权限并覆盖任何现有权限,这可能是一项代价高昂的恢复操作。

答案 1 :(得分:0)

最后我发现了问题所在。

根据有关DCOM权限的一些提示,我使用“组件服务”工具配置了“Microsoft.Excel”DCOM配置权限。但这还不够。

今天我看到除“权限”标签外,还有一个“身份”标签。默认情况下,它选择使用“初始用户”,我希望该用户是运行IIS应用程序池的用户。我已经用“真正的”用户执行了这个池,所以我没想到这是相关的,但是当我改变它并选择一个特定的用户时,一切都开始起作用了。

总而言之,我的解决方案是:

  • 打开“组件服务管理”
  • 在“DCOM配置”部分中查找与“Microsoft.Excel”相关的条目,然后右键单击“属性”。
  • 在“身份”标签中设置一个“真实”用户,该用户将在使用Interop API时运行Excel。
  • 在“权限”标签中调整权限,以便您在“身份”标签中设置的用户具有所需的权限

希望这能为任何人提供一些线索。