文章编号: 194801 - 最后修改: 2005年7月11日 - 修订: 6.2

Active Server Pages 返回 VBScript 运行时错误“800a01ad”

系统提示此文章适用于与您所使用的操作系统不同的操作系统。文章内容可能与您无关,并且已被禁用。

本页

展开全部 | 关闭全部

症状

使用 CreateObject 在 Active Server Pages (ASP) 页中创建 COM 组件可能会导致以下错误:

Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object
发生此错误的原因通常是,COM 对象依赖的动态链接库 (DLL) 出现以下情形之一:
  • 在系统中找不到
  • 不在系统路径中
  • 系统由于安全设置而无法访问

更多信息

以上每种原因都适用于实现了 COM 对象的 DLL 以及任何 DLL 依赖项。例如,如果 COM DLL 静态链接到 Win32 DLL,而系统中没有 Win32 DLL,则会生成 800a01ad 错误。

可以使用多种方式来确定 DLL 依赖项。其中包括随 Platform Software Development Kit (SDK) 和 Developer Studio 98 一起提供的 Depends.exe 工具,以及随 Visual C++ 安装的 DUMPBIN 实用程序。

可以从 Microsoft 下载中心下载以下文件:

收起这个图片展开这个图片
下载
立即下载 Dependsia64version2.1.3623.exe 软件包。 (http://download.microsoft.com/download/visualfoxpro7/utility/2.1/w9x2kmexp/en-us/dependsia64version2.1.3623.exe)
收起这个图片展开这个图片
下载
立即下载 Dependsx86version2.1.3623.exe 软件包。 (http://download.microsoft.com/download/visualfoxpro7/utility/2.1.3623/w9x2kmexp/en-us/dependsx86version2.1.3623.exe)

发布日期:2002 年 6 月 25 日

有关如何下载 Microsoft 支持文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591? (http://support.microsoft.com/kb/119591/ ) 如何从联机服务获取 Microsoft 支持文件
Microsoft 已对此文件进行了病毒扫描。Microsoft 使用的是该文件发布时可以获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器上,以防止在未经授权的情况下对其进行更改。 有关此工具的更多信息,请访问下面的 Dependency Walker 网站:
http://www.dependencywalker.com (http://www.dependencywalker.com)
Microsoft 提供了第三方联系信息以便于您寻求技术支持。这些联系信息如有更改,恕不另行通知。Microsoft 不保证这些第三方联系信息的准确性。

要使用 Depends,只需运行此工具并打开相关的 DLL。要使用 DUMPBIN 来查看依赖项,请在命令提示符下运行“dumpbin /IMPORTS <DLL 的名称>”。Depends 实用程序具有显示依赖项的依赖项这一优点。Windows 资源管理器中的“快速查看”似乎也能显示相同的信息,但通过观察发现其显示的信息并不总是完整的。

下面是关于每种可能原因的详细信息:

在系统中找不到 DLL

实现 COM 对象的 DLL 必须存在系统中,并使用正确的路径进行注册。实际上,如果在创建根本未注册的 COM 对象时失败,就会生成一种不同的错误:
Server object error 'ASP 0177 :800401f3'

要验证注册表中的路径是否正确,请运行 RegEdit 程序并搜索 PROGID(可在 CreateObject 调用中找到)。从 PROGID 项中,记下 CLSID 或将其复制到剪贴板中,然后查找 CLSID 的项。该项中应包含一个 InprocServer32 项,并具有指向该 DLL 的路径。下面阐释了此过程的完成顺序:
(from the asp file)
set obj = Server.CreateObject("BadComponent.Badguy")

(from RegEdit)
HKEY_CLASSES_ROOT\BadComponent.BadGuy\CLSID
{683DA7E0-5C73-11D2-80F6-0000F87A8236}

HKEY_CLASSES_ROOT\CLSID\{683DA7E0-5C73-11D2-80F6-0000F87A8236}\ 
InprocServer32 E:\Programs\COMPON~1\BADCOM~1\Debug\BADCOM~1.DLL
				

从命令提示符下运行的以下命令将验证此文件是否存在:
E:\>cd E:\Programs\COMPON~1\BADCOM~1\Debug
E:\Programs\COMPON~1\BADCOM~1\Debug>dir BADCOM~1.DLL

10/14/98  11:18a               241,739 BadComponent.dll

                 1 File(s)     241,739 bytes
                              2,038,755,328 bytes free
				

如果在注册表中未指定 DLL 的路径,则 DLL 必须存在于系统路径中。

COM DLL 具有的依赖项可能不是静态链接的 Win32 DLL(DUMPBIN 和 Depends.exe 显示静态链接的 DLL)。例如,COM 对象可以调用 LoadLibrary() 以及 Win32 DLL 中的函数。类似地,控件可以创建包含在单独 DLL 中的 COM 对象。其中的任何 DLL 都可能会丢失、注册不正确,或者由于安全原因而无法访问。这将导致一种运行时错误,在创建控件期间可能会发生这种错误,也可能不会发生。从 ATL 控件的 FinalConstruct() 方法返回 S_FALSE 的情形就类似于在创建控件期间出现的这种错误。这种情况假定 LoadLibrary() 或 CoCreateInstance() 在 FinalConstruct() 中失败,并且程序员选择了检查此错误和返回结果 S_FALSE。在这种情况下生成的错误类似于:

error 'ASP 0115'
Unexpected error
/badguy.asp
A trappable error occurred in an external object.The script cannot
continue running.
Server object error 'ASP 0115 :8000ffff'

Failure of this type will not generate an 800a01ad error.

DLL 不在系统路径中

系统必须能够找到实现了正在创建的 COM 对象的 DLL 的依赖 DLL(静态链接)。使用 DUMPBIN 或 Depends 确定依赖的 DLL。验证所有这些 DLL 是否与 COM DLL 在同一个目录中,或在系统路径中。

系统由于安全设置而无法访问 DLL

当客户端从服务器请求 Active Server Pages (ASP) 页时,ASP 页运行时所用的安全上下文将取决于访问 Web Server 时所用的身份验证方法。例如,匿名请求在 IUSR_MACHINENAME 的上下文中运行,其中 MACHINENAME 是计算机的名称。有关其他身份验证方法和安全注意事项方面的信息,请参考 IIS 文档。在 800a01ad 错误中,这意味着经过身份验证的用户必须能够访问(通过 NTFS 文件权限)COM DLL 及所有依赖 DLL。

可以使用试探性的方法,确定这是否为问题出现的原因。使用 Windows 资源管理器,选择 COM DLL 的“属性”,选择“安全”选项卡,然后向“所有人”至少授予 DLL 的读取访问权限。对依赖 DLL 和包含这些 DLL 的目录执行相同的操作。这将消除任何可能影响 COM 对象创建的安全限制。在确定这就是问题出现的原因后,可以实施更严格的安全限制。请记住,许多依赖 DLL 是 Windows 系统 DLL,“所有人”已经至少具有其读取访问权限了。在实施“严格的”安全限制时,不要错误地删除此访问权限。

(c) Microsoft Corporation 1998,保留所有权利。撰稿人:Robert E. Duke,Microsoft Corporation。


这篇文章中的信息适用于:
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
关键字:?
kberrmsg kbprb kbsecurity KB194801
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。