在使用 ASP 客户端的 Visual Basic IDE 中调试 COM+ 组件时发生错误

在使用 ASP 客户端的 Visual Basic IDE 中调试 COM+ 组件时发生错误
在基于 Microsoft Windows 2000 的计算机上的 Visual Basic 6.0 中调试 Microsoft COM+ 1.0 版组件时,如果客户端是 Active Server Pages (ASP) 页,则浏览器中可能显示以下错误信息:
Server object, ASP 0178 (0x800A0005) The call to Server.CreateObject failed while checking permissions.Access is denied to this object.
在基于 Microsoft Windows XP 的计算机上的 Visual Basic 6.0 中调试 Microsoft COM+ 1.5 版组件时,如果客户端是 Active Server Pages (ASP) 页,则浏览器中可能显示以下错误信息:
Server object, ASP 0178 (0x800A0005) The call to Server.CreateObject failed while checking permissions.Access is denied to this object.
仅当您在 Visual Basic 集成开发环境中运行 COM+ 组件时,才会出现此错误。在 COM+ 应用程序的编译状态下运行 COM+ 组件时,将不会出现此错误。

原因

进行身份验证的用户(通常是 IUSR_<计算机名> 帐户,如果您使用匿名访问的话)没有访问 DCOM 服务器(本例中为 VB6.exe)所需的正确权限。在 Visual Basic IDE 中调试 COM+ 组件时,启动用户是交互式用户,访问 DCOM 服务器的用户是进行身份验证的用户。

由于没有用于 VB6.exe 的 DCOM 条目,因此 DCOM 将使用默认权限。在 Windows 2000 和 Windows XP 中,DCOM 默认访问权限默认情况下只授予系统帐户和启动用户。由于启动用户和访问 DCOM 服务器的用户不是同一用户,因此将出现本文“症状”一节中显示的错误信息。

解决方案

可使用两个建议的变通方法:

变通方法 1

在注册表中为 VB6.exe 添加 DCOM 条目。这使您能够设置特定的 DCOM 权限,用于在 Visual Basic 中调试 COM+ 组件。
1. 在 DCOM 中创建 VB ASP 调试条目:
a. 启动 Microsoft 记事本或其他文本编辑器,然后键入以下语法(区分大小写):
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}]
@="VB ASP Debugging"
[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}\LocalServer32]
@="vb6.exe"
[HKEY_CLASSES_ROOT\AppID\vb6.exe]
"AppId"="{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}"
b. 将文件保存为 Vbaspdbg.reg。
c. 找到保存 Vbaspdbg.reg 文件的文件夹,然后双击此文件(它将自动注册到 Windows 注册表中)。
2. 将 Everyone 帐户添加到 DCOM 权限中,以用于 Visual Basic ASP 调试。

Windows 2000
a. 启动 DCOMCNFG。在开始菜单上,单击运行,然后在对话框中键入 dcomcnfg。
b. 在分布式 COM 配置属性页上,单击应用程序选项卡,从列表中选择 VB ASP 调试,然后单击属性。
c. 在 VB ASP 调试属性页中,单击安全性选项卡,然后单击以选中使用自定义访问权限复选框。单击编辑。
d. 在注册表值的权限窗口中,单击添加,然后为允许访问添加 Everyone 帐户。
e. 单击确定,然后单击应用以应用更改并退出分布式 COM 配置属性页。
f. 重新启动计算机,以使更改生效。
Windows XP

a. 启动 COM+ Explorer。在开始菜单中,单击管理工具,然后单击组件服务。
b. 依次单击以展开组件服务、计算机、我的电脑和 DCOM 配置。
c. 右键单击 VB ASP 调试,然后单击属性。
d. 在安全选项卡上的访问权限下,选择自定义,然后单击编辑。
e. 在访问权限窗口中,单击添加,然后添加 Everyone account for Allow Access(允许访问的 Everyone 帐户)选项。
f. 单击确定,单击应用,然后再单击确定以应用更改,并退出“DCOM 配置属性”页。
g. 重新启动计算机,以使更改生效。

变通方法 2

1. 为进行调试,可将 ASP 页所在的“虚拟目录”的“应用程序保护”设置为“高(独立)”。这将强制 ASP 页在它自己的进程中运行,从而可以更改安全性而不会影响 Web 站点的其他内容。
a. 启动 Internet 服务管理器。
b. 右键单击 ASP 页所在的虚拟目录,然后单击属性。
c. 单击虚拟目录选项卡,然后在应用程序保护下拉列表中选择高(独立)。
d. 单击应用。
2. 关闭对此虚拟目录的匿名访问,并确保选中了集成 Windows 验证或基本验证:
a. 在“虚拟目录”的属性对话框上,单击目录安全性选项卡。
b. 单击匿名访问和验证控制的编辑。
c. 确保清除了“匿名访问”复选框。
d. 单击集成 Windows 验证或基本验证。
3. 如果使用集成 Windows 验证,请运行客户端浏览器以便使用与 Visual Basic IDE 调试会话相同的用户帐户访问 ASP 页。如果使用基本验证,请输入 Visual Basic IDE 调试会话在其中运行的同一用户帐户的用户名和密码。

注意:第二个变通方法假定 COM 的“默认访问权限”未发生更改。如果“默认访问权限”从未更改过,则 COM 将构建一个访问控制列表 (ACL),以便向系统帐户和服务器标识授予权限。在这种情况下,服务器标识是登录并运行 Visual Basic IDE 调试会话的用户。如果 DCOM 的“默认访问权限”被更改过,则第二个变通方法需要将 Visual Basic IDE 调试会话在其中运行的用户帐户添加到“默认访问权限”中。这可以通过使用 DCOMCNFG 来完成。有关更多信息,请参阅 MSDN 联机资料库中有关 COM 安全性的帮助主题:
posted @ 2005-01-12 22:03  Roland  阅读(919)  评论(1)    收藏  举报