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

时间:2012-01-17 23:37:12

标签: iis-7 asp-classic ms-office

我们正在努力认证我们在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.Description中返回的错误信息是:

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-classic应用程序。我已经检查了Ogawa的解决方案,关于systemmprofile需要一个Desktop文件夹,以及AppPool是否配置为加载用户配置文件。 Word 97-2003文档DCOM对象配置为与站点的应用程序池作为相同的用户运行。启动和激活,访问权限和配置权限,用户添加了所有权限设置。

编辑添加: 以交互方式运行时,此脚本(在cscript或wscript下运行)成功创建Word.Application并提取用户名:

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

显然不是Error creating Word object in classic ASP on IIS7的重复,因为我们在CreateObject for Word.Application上获取错误而不是在打开文档时。

服务器是Windows 2008 x86。

我在配置时错过了什么?

4 个答案:

答案 0 :(得分:3)

在我们的MSDN订阅中刻录支持事件后,我们发现了这一点:

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

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

如果有人知道appcmd.exe的正确调用以设置应用程序池标识直通,那么它在评论中会很棒....虽然我们的脚本可以在这里使用相同的用户名/密码组合,但它是最好减少一个存储位置的数量。

答案 1 :(得分:1)

我很长一段时间没有解决服务器端Word自动化问题,但我会对它进行一次尝试。

我们以前查看此问题的原因之一是因为用户配置文件无法加载。它可能是我们不正确的配置,但也许你遇到了同样的问题。

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

  1. 通过以该用户身份登录IIS服务器,确保AppPool用户存在用户配置文件。
  2. 创建并安装不执行任何操作的Windows服务。或者您可以使用无用的现有服务(传真)。
  3. 将服务配置为“登录为:”与AppPool相同的用户。
  4. 将“启动类型”设置为“自动”。
  5. 确保它正在运行。
  6. 我们实际上是以AppPool用户身份运行服务,以此来保持用户配置文件的打开状态。希望这至少可以消除它是用户个人资料问题的可能性。

答案 2 :(得分:0)

请查看Ogawa回答的以下链接,通过创建文件夹

为我的魅力

C:\的Windows \ system32 \设置\ systemprofile \桌面

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

答案 3 :(得分:-1)

尝试查找已在本地计算机或服务器上设置的用户。显然IUSR_UNKNOWN没有“我的文档”文件夹,微软也没有让这个奇怪的人通过注册表当前用户会话访问你的Word文档。好运,试图说服微软允许这个人进入。

而是创建新用户或域用户,并为其提供本地管理员访问权限(用于管理目的)或普通用户帐户以供正常使用。并在他的本地计算机或服务器上设置一个帐户。瓦拉。没有更多的愚蠢。