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

Iis 7 在IIS7上的ASP Classic中创建Word.Application时出错,iis-7,asp-classic,ms-office,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 &

我们正在努力证明我们的应用程序可以部署在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
站点配置为使用其应用程序池的特定用户帐户。该网站是ASP.Net和ASP经典应用程序的混合模式。我已经查看了Ogawa的解决方案,该解决方案需要systemprofile有一个桌面文件夹,并且需要将AppPool配置为加载用户配置文件。Word 97-2003文档DCOM对象配置为以与站点应用程序池相同的用户身份运行。启动和激活、访问权限和配置权限—用户以完全权限集添加的所有权限

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

var wordobj = new ActiveXObject("Word.Application");
WScript.echo(wordobj.UserName);
wordobj.quit();
显然不是的副本,因为我们得到的是Word.Application的CreateObject上的错误,而不是打开文档时的错误

服务器是Windows 2008 x86


我在配置这个时错过了什么?

很长一段时间以来,我都不需要解决服务器端Word自动化问题,但我会尝试一下

我们经常看到这个问题的原因之一是用户配置文件无法加载。这可能是我们的配置不当,但可能您遇到了相同的问题

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

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

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

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

    我们经常看到这个问题的原因之一是用户配置文件无法加载。这可能是我们的配置不当,但可能您遇到了相同的问题

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

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

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

    请查看小川回答的以下链接,该链接通过创建文件夹对我很有吸引力

    C:\Windows\System32\config\systemprofile\Desktop


    请查看小川回答的以下链接,创建文件夹对我来说非常有吸引力

    C:\Windows\System32\config\systemprofile\Desktop


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

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

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


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

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

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

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


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

    只要尝试查找已在本地计算机或服务器上设置的用户即可。显然,IUSR_UNKNOWN没有“My documents”文件夹,Microsoft也没有授予这个陌生人通过注册表当前用户会话访问Word文档的权限。所以,祝你好运,让微软相信这个人是被允许访问的


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

    只要试着找到一个已经在本地机器或服务器上设置好的用户。显然,IUSR_UNKNOWN没有“My documents”文件夹,Microsoft也没有授予这个陌生人通过注册表当前用户会话访问Word文档的权限。所以,祝你好运,让微软相信这个人是被允许访问的

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