1,症状:
试图运行一个使用 Server.CreateObject 实例化一个 ActiveX 组件的活动服务器页面 (ASP) 页时出现以下错误消息:
服务器对象错误 ASP 0177:80040154
Server.CreateObject 失败
/<path>/<yourasp.asp><line # >
Server.CreateObject 调用失败。无法创建请求的对象实例。
2,原因
下面是一些典型产生此错误的原因:
- 未正确注册您的控件。
- 在"记录用户"--通常匿名帐户--没有足够的权限运行该控件。在许多情况下 (IUSR_ <machine>) 上的匿名登录帐户不具有适当的权限,某些目录/文件或特定的组件和它的依赖项。同时小于频繁如果某些项在注册表的权限设置不正确,它会导致该控件初始化失败。
- 在"每个人"组已从具有读某些注册表项由于错误的概念的权限的所有人意味着任何人都时实际上它只是说明域/计算机上的所有已验证的用户。
- 在一个文件数据库访问或 $ FoxPro,如的情况下包含数据库文件目录不提供足够的权限为已经过身份验证的用户。
3,解决
警告: 的以下假定熟悉 Internet 信息服务器和 $ 编辑注册表。它总是建议您备份注册表之前以进行任何更改。
由于此错误是不正确的权限设置对文件或注册表设置与相关联,您必须完成以下步骤:
- 找出已验证用户是谁。若要确定哪些用户进行身份验证,您 ASP 的顶部添加下面的代码页: <% Response.Write("LOGON_USER: " & _ Request.ServerVariables("LOGON_USER")) %> 在 LOGON_USER 为空,如果您经过身份验证作为 IUSR_machine。否则,在 LOGON_USER 显示 <domain\user> 已验证身份的用户试图创建该对象的用户的名称。
- 确认已验证用户 (或组) 具有在所需的目录、 文件,和注册表项的权限。这要求在目录、 文件,和特定于控件的注册表项的知识。下面是 ActiveX 数据对象的要求的列表。
回到顶端
ADO 特定案例的文件/目录权限
\InetPub - IUSR_<machine> READ
\InetPub\wwwroot - IUSR_<machine> READ
\Program Files\Common Files\System\ADO - IUSR_<machine> READ
\Program Files\Common Files\System\OLE DB - IUSR_<machine> READ
\Program Files\Common Files\ODBC\Data Sources -IUSR_<machine> READ
\WinNT - IUSR_<machine> CHANGE
\WinNT\System32 - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp\Cmpnts - IUSR_<machine> READ
\WinNT\Temp - IUSR_<machine> CHANGE
回到顶端
ADO 特定案例的注册表权限
确保下列键上设置以下权限:
权限:
<machine>\Administrator - Full Control
Creator Owner - Full Control
Everyone - READ
INTERACTIVE - Special Access (Query Value, Set Value, Create
Subkey, Enumerate Subkeys,
Notify, Delete)
SYSTEM - Full Control
密钥:
HKEY_CLASSES_ROOT
\LICENCES
\CEDD4F80-B43C-11cf-837C-00AA00573EDE
HKEY_CLASSES_ROOT
\ADODB.Command
\ADODB.Connection
\ADODB.Parameter
\ADODB.Recordset
回到顶端
文件和文件夹权限的数据库大小写
请确保数据库文件和文件夹包含了数据库文件提供了经过身份验证的用户或组的读取、 写入,和执行权限。
4,更多:
常规问题步骤
- 如果 ASP 已正确安装通过运行"ADO 使用 Server.CreateObject"示例复选了"活动服务器页面 Roadmap\More samples 子文件夹"
- 请确保所有的 dll 中注册的 Regsvr32。
- 请确保没有注册 DLL 和注册表项指向正确的多个版本。
- 请确保任何 dll 使用单元线程模型和不是单线程 (下面参见注释 3)。
- 请确认主域控制器 (PDC) 为每个人授予从网络访问此计算机"权限。如果 IIS 是一个 PDC 确保 IUSR_ <machine>还具有这些权限还在本地登录"权限。
回到顶端
快速权限检查步骤
- 通过清除基本和 NT 质询和响应 (NTCR) 在 IIS 服务管理器中强制匿名
- 若要查看是否它使一个差异管理员组暂时添加 IUSR_ <machine>。如果是这样,问题是权限问题。
- 打开 NT 审核 (如下所述),然后重试。
回到顶端
不 So 快速权限检查步骤
- 强制通过清除基本和 NT 质询和响应 (NTCR) 在 IIS 服务管理器中的匿名。
- 创建一个新的名为 IUSR_Test 的 NT 用户帐户。
- 给出了 IUSR_Test 的根驱动器完全控制,并且一直向下层叠这些权限。以后,IUSR_Test 删除,从而将它们从任何目录或文件中删除。
- 打开 NT 审核 (如下所述),然后重试。
启用 NT 审核,请执行下列操作:
若要启用审核,打开用户管理器并选择"审核"从策略"菜单。选择"文件和对象访问"故障。打开"Windows NT 资源管理器",然后选择您的硬盘的根目录。用鼠标右键单击,然后选择"属性。选择安全选项卡,然后按审核按钮。添加感兴趣 (由 ASP 页或 IUSR_machine 返回其中) 的用户并选择所有失败复选框。请确保将这些设置应用到所有文件夹。使用"事件查看器"来查看 (在日志菜单中选择"安全性") 的任何访问失败。请确保您关闭审核完成后进行更改。
注意 2: Jet 使用 SYSTEM TEMP 和 TMP 环境变量指定 JET 操作过程中创建的临时文件的位置。默认情况下这些环境变量为用户定义的而不是系统范围的设置。这些设置可以执行两个操作之一。
选项 1。在将 autoexec.bat 中添加类似于以下两行:
Set TEMP=C:\Temp Set TMP =C:\Temp
选项 2。右键单击我的电脑:
- 单击属性,选择环境 TAB。
- 单击系统变量列表框 (在上一个) 中的条目。
- 在变量和值编辑控件中键入以下: Variable = Temp Value = C:\Temp
- 单击设置。您将现在,请参阅 TEMP 已添加到列表中的系统变量。
- 重复该过程为 TMP 变量。
- 重新启动计算机使更改生效。
此外,已找到 IUSR_ <machine>需要更改到 WinNT 目录使用 Access 数据库驱动程序时创建临时文件的权限。
注 3: 默认情况下 ASP 创建单线程单元的客户端这意味着只有单线程单元 inproc 服务器可由 IIS 传递所需的安全上下文。所有其他线程模型在系统上下文中运行。这意味着,使用单线程模型的 DLL 中安全上下文的系统,而不是预期将启动已验证用户身份