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

Windows 7 32位Windows和IIS 7的Server.CreateObject()失败,windows-7,com,asp-classic,createobject,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页

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页面的默认网站和虚拟目录中授予该用户权限。我已经注册了dll

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

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

现在,我们正再次尝试克服这个问题,以便我们可以再次转到Windows7。似乎很多人都有这个问题,但他们找到并发布的任何解决方案似乎都不是我所需要的


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

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


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


如果您发布Procmon的结果,我可能可以修改此答案,使其更有帮助。

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

以下是我所做的:

  • 干净安装Windows 7 Professional 64位SP1

  • 启用Windows ASP功能

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

  • 创建一个简单的VB6 Active X dll(类名为“CXUtils.Utils”),该dll添加两个输入数字,并返回结果
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

  • 创建并安装一个简单的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>

添加
2+3=
3 + 4 =
  • 浏览到web应用程序并查看结果


如果这些都无法编译,我深表歉意-为了使格式正确显示,需要进行大量编辑。

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

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


顺便说一句,我正在Windows7环境中运行IIS7.5。我终于找到了一篇Microsoft文章,其中说问题是由于DCOM中缺少VB ASP调试的注册表项和/或DCOM权限不足,而不是IIS。文章的URL是。我实施了变通方案1。一次重新启动之后,我就可以从ASP.NET进入VB DLL代码了。为微软做一个,我不经常这么说:-)

另一个可能有效的方法是在dcomcnfg上安装DLL作为DCOM应用程序。它将在不同的凭据下运行。

您从IIS收到的错误消息是什么?错误描述是“006~ASP 0178~Server.CreateObject访问错误~检查权限时调用Server.CreateObject失败。拒绝访问此对象。”err.number=-2147024891您是否尝试将apppool用户/iusr设置为本地管理员?只是为了测试。。。或者将另一个windows用户用于appool和web应用程序等待。。。您是否尝试添加web应用程序而不是虚拟目录?谢谢您的建议。授予iusr_xxx和“网络服务”的管理员权限没有帮助。我不知道如何为应用程序池设置另一个用户,我在IIS管理员中看不到应用程序池中的安全选项卡。我已经尝试过了,正如你建议的那样,将虚拟目录更改为应用程序,但是页面根本没有打开;它只是挂着。所以我把它改回了一个虚拟目录。谢谢你的想法。在IIS7中,iusr是不可见的,但你仍然可以添加权限。在选择用户或组的请求程序中,只需键入:IIS APPPOOL\{application pool name},然后单击“检查名称”。这不是你问题的解决方案,但它可能会让你更接近解决方案……嗨,大卫,我添加了过程监视器。当我尝试运行这个ASP页面PRL.ASP时,它说进程名是w3wp.exe…操作是QueryAlinformationFile…路径:d:\xxx\PRL.ASP…结果:溢出缓冲区。。。下一行是:进程名是w3wp.exe…操作是QueryOpen…路径:d:\xxx\prl.asp\web.config…结果:找不到路径--------------非常感谢。有什么想法吗?听起来你只是没有web.config文件——还有其他错误吗?这是一个旧的ASP应用程序,我们有一个GLOBAL.asa,不需要web.config。其他错误:RegQueryValue和RegQueryKey表示找不到名称。有些条目说缓冲区太小