在IIS7上的ASP Classic中创建Word.Application时出错



我们正在努力验证我们的应用程序,以便在Windows Server 2008上部署,但存在一些配置问题。

以下代码引发互操作错误:

On Error Resume Next
Set WordApp = Server.CreateObject("word.application")
If Err.number <>0 Then
  SetErrorDesc ErrorDesc, "Unable to instantiate word. (" & err.Description & ")<br>"
  SetErrorStatus ErrorStatus,True
End If

错误信息在err中返回。描述为:

006~ASP 0178~Server.CreateObject Access Error~The call to Server.CreateObject failed while checking permissions. Access is denied to this object.

该站点已配置为将特定用户帐户用于其应用程序池。该网站是一个混合模式的ASP.Net和ASP的经典应用程序。我已经查看了Ogawa关于系统配置文件需要一个Desktop文件夹以及AppPool需要配置为加载用户配置文件的解决方案。Word 97-2003 Document DCOM对象被配置为以与网站应用程序池相同的用户身份运行。"启动和激活"、"访问权限"one_answers"配置权限"—所有这些都是用户在设置了完整权限的情况下添加的。

已编辑以添加:当交互运行时,这个脚本(在cscript或wscript下运行)成功地创建了Word.Application并提取了用户名:

var wordobj = new ActiveXObject("Word.Application");
WScript.echo(wordobj.UserName);
wordobj.quit();

显然不是在IIS7上的经典ASP中创建Word对象的错误的重复,因为我们在Word.Application的CreateObject上而不是在打开文档时得到错误。

服务器为Windows 2008 x86。

我在配置时遗漏了什么?

在从MSDN订阅中烧毁一个支持事件后,我们发现:

在IIS7上,必须在AppPool和应用程序的匿名身份验证中配置进程标识。如果您混合运行ASP和ASP.NET,则可以将匿名身份验证(在网站的身份验证详细信息中)配置为指向AppPool的标识,或者使用特定的用户名/密码组合。

匿名身份验证的默认值是IUSR,而不是应用程序池标识。

如果有人知道如何正确调用appcmd.exe来设置应用程序池标识传递,那么在评论中就太好了。。。。尽管我们的脚本可以在这里简单地使用相同的用户名/密码组合,但最好将其存储位置的数量减少一个。

我已经很长时间没有解决服务器端Word自动化问题了,但我会尝试一下。

我们过去看到这个问题的原因之一是因为用户配置文件无法加载。对于我们来说,这可能是一个不正确的配置,但也许你也遇到了同样的问题。

以下是我们如何解决的问题:

  1. 通过以AppPool用户的身份登录IIS服务器,确保存在该用户的用户配置文件
  2. 创建并安装一个不执行任何操作的Windows服务。或者,您可以使用一项没有任何用途的现有服务(传真)
  3. 将服务配置为与AppPool相同的用户"登录身份:"
  4. 将"启动类型"设置为"自动"
  5. 确保它正在运行

我们本质上是以AppPool用户的身份运行服务,以保持用户配置文件的打开。希望这至少可以消除用户配置文件问题的可能性。

请查看Ogawa回答的以下链接,它通过创建文件夹对我来说很有魅力

C: \Windows\System32\config\systemprofile\DDesktop

http://social.msdn.microsoft.com/Forums/en-US/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91?prof=required

只需尝试查找已在本地机器或服务器上设置的用户。显然,IUSR_UNKNOWN没有"我的文档"文件夹,Microsoft也没有允许这个陌生人通过注册表当前用户会话访问您的Word文档。祝你好运,试图说服微软允许此人访问。

相反,创建一个新用户或域用户,并为其提供本地管理员访问权限(出于管理目的)或常规用户帐户以供正常使用。并在您的本地计算机或服务器上为他设置一个帐户。瓦拉。不再昏迷。

相关内容

最新更新