我们正在努力验证我们的应用程序,以便在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自动化问题了,但我会尝试一下。
我们过去看到这个问题的原因之一是因为用户配置文件无法加载。对于我们来说,这可能是一个不正确的配置,但也许你也遇到了同样的问题。
以下是我们如何解决的问题:
- 通过以AppPool用户的身份登录IIS服务器,确保存在该用户的用户配置文件
- 创建并安装一个不执行任何操作的Windows服务。或者,您可以使用一项没有任何用途的现有服务(传真)
- 将服务配置为与AppPool相同的用户"登录身份:"
- 将"启动类型"设置为"自动"
- 确保它正在运行
我们本质上是以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文档。祝你好运,试图说服微软允许此人访问。
相反,创建一个新用户或域用户,并为其提供本地管理员访问权限(出于管理目的)或常规用户帐户以供正常使用。并在您的本地计算机或服务器上为他设置一个帐户。瓦拉。不再昏迷。