在基于 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 服务器的用户不是同一用户,因此将出现本文“症状”一节中显示的错误信息。
由于没有用于 VB6.exe 的 DCOM 条目,因此 DCOM 将使用默认权限。在 Windows 2000 和 Windows XP 中,DCOM 默认访问权限默认情况下只授予系统帐户和启动用户。由于启动用户和访问 DCOM 服务器的用户不是同一用户,因此将出现本文“症状”一节中显示的错误信息。
解决方案
可使用两个建议的变通方法:
变通方法 1
在注册表中为 VB6.exe 添加 DCOM 条目。这使您能够设置特定的 DCOM 权限,用于在 Visual Basic 中调试 COM+ 组件。1. | 在 DCOM 中创建 VB ASP 调试条目:
|
||||||||||||||||||||||||||
2. | 将 Everyone 帐户添加到 DCOM 权限中,以用于 Visual Basic ASP 调试。
Windows 2000
|
变通方法 2
1. | 为进行调试,可将 ASP 页所在的“虚拟目录”的“应用程序保护”设置为“高(独立)”。这将强制 ASP 页在它自己的进程中运行,从而可以更改安全性而不会影响 Web 站点的其他内容。
|
||||||||
2. | 关闭对此虚拟目录的匿名访问,并确保选中了集成 Windows 验证或基本验证:
|
||||||||
3. | 如果使用集成 Windows 验证,请运行客户端浏览器以便使用与 Visual Basic IDE 调试会话相同的用户帐户访问 ASP 页。如果使用基本验证,请输入 Visual Basic IDE 调试会话在其中运行的同一用户帐户的用户名和密码。
注意:第二个变通方法假定 COM 的“默认访问权限”未发生更改。如果“默认访问权限”从未更改过,则 COM 将构建一个访问控制列表 (ACL),以便向系统帐户和服务器标识授予权限。在这种情况下,服务器标识是登录并运行 Visual Basic IDE 调试会话的用户。如果 DCOM 的“默认访问权限”被更改过,则第二个变通方法需要将 Visual Basic IDE 调试会话在其中运行的用户帐户添加到“默认访问权限”中。这可以通过使用 DCOMCNFG 来完成。有关更多信息,请参阅 MSDN 联机资料库中有关 COM 安全性的帮助主题: |