【问题标题】:IIS 7 'Server.CreateObject failed'IIS 7 'Server.CreateObject 失败'
【发布时间】:2009-03-12 11:04:44
【问题描述】:

我已经在我的工作站上安装了 IIS7 并启用了 IIS6 兼容性,因此我可以测试经典的 asp 页面(对于一些旧项目在这里工作)。

有些页面可以工作,但有些则不能。

我收到:

Serverobject error 'ASP 0177 : 800401f3'

Server.CreateObject failed

/master.central.be/master_connection.asp, line 55

800401f3

在那条线上我得到了:

Set dicTalenLabels = Server.CreateObject("Scripting.Dictionary")

有人知道如何解决这个问题吗?

编辑:

正如 Michael Pryor 所建议的,我已经运行了一个具有类似代码的 vbscript,并且它是成功的。所以它可能与权限有关。目前正在尝试找出确切的文件...

我是否需要将 IUSR 添加到 scrrun.dll 中?尝试时,虽然我是管理员,但我没有权限。

【问题讨论】:

    标签: iis iis-7 asp-classic windows-vista


    【解决方案1】:

    已编辑:他正在运行 32 位 vista,所以这绝对不是 64 位问题。

    制作一个 test.vbs 文件并将其放入其中

    Dim o: Set o = CreateObject("Scripting.Dictionary")

    然后像这样运行它

    cscript.exe test.vbs

    它会给你同样的错误吗?

    如果是这样,则 regsvr32 失败,或者它通常放入注册表中的注册表项有问题。

    如果它没有失败,很可能是您运行您的 ASP 页面的用户(默认情况下是 IUSR_machinename)对其所需的注册表项或实际的 .dll 没有权限

    【讨论】:

    • 我试过了,但是找不到 syswow64 目录。我搜遍了整个系统,regsvr32.exe只能在c:\windows\system32下找到。我的系统是 Vista 32bit。谢谢你的建议!
    • 啊哈,我想我们快到了!运行 vbscript 时,它 idd 不会给出错误。现在查看 asp 权限...谢谢,希望我能投票更多...
    • 我需要将IUSR添加到scrrun.dll吗?尝试时,虽然我是管理员,但我没有权限。
    • “尝试时,虽然我是管理员,但我没有权限”发布您的意思的屏幕截图。我不明白如果您是管理员,您怎么没有权限。
    • 或直接使用此链接:fogcreek.com/FogBugz/KB/setup/RightAccount.html 将您的网络应用程序设置为在您的帐户而不是 IUSR 下运行(查看指南时将“fogbugz 用户名”更改为您的用户名)
    【解决方案2】:

    0x800401f3 表示“Scripting.Dictionary”不正确或找不到。 Scripting.FileSystemObject 由同一个 dll 文件提供,我知道一些主机通过取消注册 dll 文件来禁用它,这也会禁用 Dictionary 对象。你能检查一下 Scripting.FileSystemObject 是否有效吗?

    这两个对象都由 Windows\System32\scrrun.dll(或 Windows\SysWOW64\scrrun.dll,如果您在 64 位主机上执行 32 位)提供。检查此文件的权限,并验证您的 asp 脚本执行的权限。

    【讨论】:

    • 你说得对,Scripting.FileSystemObject 也不起作用。我看到列出了“系统”、“管理员”、“用户”、“TrustedInstaller”的用户或组,知道我应该添加谁吗?
    • @Sander:你可以尝试在提升的命令提示符下执行“regsvr32 scrrun.dll”吗?
    • 我尝试注册 dll 但没有帮助,它显示“scrrun.dll 的 DLLRegisterServer 成功”。 UAC 被禁用。感谢您的建议顺便说一句...更多建议?
    • @Sander:我没有更多来自不同谷歌结果的建议。检查是否是权限问题,将您的匿名用户 (IUSR) 添加到管理员组。如果它在此之后工作,请删除成员资格并使用进程监视器来查找访问了哪些文件以及失败的位置。
    【解决方案3】:

    看看:

    这两个链接都来自 Bill Staples 的博客,他是 IIS 方面的负责人之一,当我尝试启动和运行 Classic ASP 时,第一个链接中的提示帮助我解决了问题。

    【讨论】:

      【解决方案4】:

      我发现对系统对象的调用,例如

      set rs = server.createobject("adodb.recordset") 
      

      set fs = server.createobject("scripting.filesystemobject");
      

      在生产服务器上运行数周后有时会失败。这不是一个很好的解决方案,但手动回收应用程序池可以解决它。此外,将应用程序池设置为每隔几个小时回收一次是一种保持新鲜的方法。只要确保您不会意外注销所有人(如果使用会话作为凭据)。

      可能是开发人员忘记“关闭”和“设置为空”对象。您使用“set”创建的任何对象都需要在使用后通过将它们设置为空来进行处理。

      set rs = server.createobject("adodb.recordset")
      rs.open sql, db, 1, 3       ' adOpenKeyset, adLockOptimistic
      ' some process here
      rs.close
      set rs = nothing
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2014-07-09
        • 2012-01-06
        • 2015-11-29
        • 2015-10-08
        • 1970-01-01
        相关资源
        最近更新 更多