在使用 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 安全性的帮助主题:
|