11

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'd dll's。

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

我在不同的新闻组中跟踪了许多线索,但我可以克服这个问题。去年,一年零 1/2 年前,我们尝试过这个,并且遇到了同样的问题。由于我们无法克服这个问题,我们又回到了 Windows NT。我们在 NT 上从来没有遇到过这个问题。

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

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

4

5 回答 5

4

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

这是我所做的:

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

  • 启用 Windows ASP 功能

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

启用 32 位应用程序池

  • 创建一个简单的 VB6 Active X dll(类名为“CXUtils.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

注册自定义 VB6 DLL

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

默认.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>
  • 浏览到 Web 应用程序并查看结果

示例 asp 页面结果

如果这不能全部编译,我深表歉意 - 进行了大量编辑以使格式正确显示。

于 2012-12-26T00:47:36.280 回答
4

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

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

于 2012-12-19T21:19:29.717 回答
1

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

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

于 2012-12-19T21:15:47.007 回答
0

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

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

顺便说一句,我在 Windows 7 环境中运行 IIS 7.5。我终于找到了一篇 Microsoft 文章,说问题是由于 DCOM 中缺少 VB ASP 调试的注册表项和/或 DCOM 权限不足,而不是 IIS。文章的 URL 是http://support.microsoft.com/kb/q259725。我实施了围绕 #1 的工作。一次重新启动后,我可以从 ASP 进入 VB DLL 代码。为微软加油,我不经常这么说:-)

于 2013-09-11T21:34:04.807 回答
0

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

于 2015-08-10T16:52:23.613 回答