Server.CreateObject()失败,32位Windows和IIS 7

时间:2012-12-11 14:55:26

标签: windows-7 com asp-classic createobject

Windows 7 32位,IIS 7.5.760016385

我在Visual Basic 6.0中创建了一个DLL,并尝试在经典ASP代码中使用它:

set obj = Server.CreateObject("a.b")

我收到以下错误:

  

006 ASP 0178
  Server.CreateObject访问错误
  检查权限时对Server.CreateObject的调用失败。此对象拒绝访问。
  err.number = -2147024891

我尝试创建iusr_cmpname用户并在此ASP页面的默认网站和虚拟目录中为其授予权限。我有REGSVR32的dll。

我已经去了“打开和关闭Windows功能”并选择了IIS /万维网服务/应用程序开发功能,然后检查了ASP,ASP.net,ISAPI扩展和ISAPI文件管理器。

我已经跟踪了不同新闻组中的许多线索,但我可以解决这个问题。 去年,我们在一年半前尝试过这个问题。由于我们无法克服这个问题,我们回到了Windows NT。我们在NT上从未遇到过这个问题。

现在我们再次尝试解决这个问题,以便我们再次转向Windows 7。似乎很多人都遇到了这个问题,但是他们找到并发布的任何解决方案似乎都不是我需要的。

任何帮助将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:4)

我强烈建议您使用Procmon来查找访问冲突。几年前我遇到过类似的问题,这是解决问题的唯一方法。在那种情况下,结果是系统临时文件夹缺乏权限。

如果您发布Procmon的结果,我可能会修改此答案以提供更多帮助。

答案 1 :(得分:4)

问题似乎与IIS无法在文件系统上访问您的自定义VB6 Active X dll有关。 我在一个默认Web应用程序的目录中注册了一个我创建的自定义DLL,并且能够让ASP创建对象。

这就是我的所作所为:

  • 全新安装Windows 7 Professional 64位,SP1。

  • 启用Windows ASP功能

  • 此步骤仅适用于64位Windows - 使用IIS管理器,为默认应用程序池启用32位应用程序。

enable 32-bit application pool

  • 创建一个简单的VB6 Active X dll(类名为“CXUtils.Utils”),它添加两个输入数字,并返回结果。

Utils.cls:

Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer     
    Sum = a + b
End Function
  • 这是重要的一步 - 在管理命令提示符下,在默认Web应用程序位置注册Vb6 Active X dll: C:\的Inetpub \ wwwroot的

Register Custom VB6 DLL

  • 创建并安装一个简单的asp页面,从上面实例化dll。安装位置是默认的Web应用程序位置C:\ inetpub \ wwwroot

的Default.asp:

<%@ Language=VBScript %>
<%
Option Explicit
Response.Expires = 0
Response.Expiresabsolute = Now() - 1 
Response.AddHeader "pragma","no-cache" 
Response.AddHeader "cache-control","private" 
Response.CacheControl = "no-cache" 

Function Sum(a, b)
    Sum = a + b
End Function

Function Sum2(a, b)
    Dim adder
    set adder = Server.CreateObject("CXUtils.Utils")
    Sum2 = adder.Sum(a, b)
    set adder = nothing
End Function
%>
<html>
    <head>
        <title>Add</title>
    </head>
    <body>
    <b>2 + 3</b> = <%= Sum(2,3) %><br />
    <b>3 + 4</b> = <%= Sum2(3,4) %>
    </body>
</html>
  • 浏览网页应用并查看结果

Sample asp page results

如果不能全部编译,我很抱歉 - 为了让格式正确显示,进行了大量编辑。

答案 2 :(得分:0)

此页面表明问题可能是分配给VB运行时的访问权限。尝试为Msvbvm60.dll分配每个人的读取和执行权限。

http://support.microsoft.com/kb/278013

答案 3 :(得分:0)

我想我遇到了类似的问题。我试图从一个经典的ASP应用程序中在VB6 IDE中运行的VB6 DLL中交互式调试代码。当应用程序执行Server.CreateObject语句时,它返回以下错误:

服务器对象:006~ASP 0178~Server.CreateObject访问错误〜检查权限时对Server.CreateObject的调用失败。此对象拒绝访问。

BTW,我在Windows 7环境中运行IIS 7.5。我终于找到一篇微软文章说这个问题是由于在DCOM中缺少VB ASP调试的注册表项和/或DCOM的权限不足,而不是IIS。该文章的网址为http://support.microsoft.com/kb/q259725。我实施了Work Around#1。一个重新启动后,我可以从ASP进入VB DLL代码。粉笔给微软,我不经常说: - )

答案 4 :(得分:0)

另一种可行的方法是在dcomcnfg上将DLL安装为DCOM应用程序。它将以不同的凭据运行。