DCOM:CoCreateInstanceEx返回E_ACCESSDENIED
我正在使用两台计算机上的服务器和客户端来处理DCOM应用程序,这两台计算机都运行带有Service Pack 2的WinXP。在两台计算机上,我使用相同的用户名和密码登录。
当一台计算机上的客户端调用CoCreateInstanceEx,要求另一台计算机启动服务器应用程序时,它将返回E_ACCESSDENIED。
我尝试进入dcomcnfg中的服务器应用程序的组件属性,并为所有人提供全部权限,但这无济于事。
我需要怎么做才能使此呼叫成功?
更新:当服务器应用程序在Windows 2000机器上运行时,我没有收到此错误。 CoCreateInstanceEx返回S_OK。
解决方案
回答
要检查的三件事:
1)返回dcomcnfg并尝试确保不仅访问安全性而且"启动权限"部分中都包含适当的安全性用户或者组。
2)确保将"身份验证级别"设置为"无"以外的其他值
3)还要检查在我们设置的安全权限中配置的帐户实际上是否可以访问该组件所在的磁盘上的位置。
编辑:
还有一个:我们是否也首先调用CoInitialiseSecurity()?铃响了!
编辑2:
根据更新:尝试完全丢弃两台XP计算机上的防火墙,看看是否有所不同。我们可能需要明确让DCOM通过。
回答
正确,因此,如果身份验证级别设置为默认。在"默认设置"中设置的身份验证级别是什么?只是出于兴趣。 (尽管它可以在2000个盒子上使用的事实可能会使它变得多余)
编辑:
另外:我似乎还记得当我以前使用DCOM播放/工作时进行了大量的重新启动,因此当我们对dcomcnfg设置感到满意时,也许两台计算机的快速重新启动也不会出错。
回答
顺便说一句,Windows 2000包装盒的味道是什么?专业版,服务器版,高级服务器...
另外,两者之间的域成员身份之间是否有区别(一个在一个域上,另一个不在域上,不同的域,等等?)
有时,DCOM错误还会在系统事件日志中出现,特别是对于对象创建,我们是否在那里检查了线索?
回答
我有同样的问题。
该问题发生在具有XP SP2 + OS或者更高版本的计算机上。
我使用以下步骤解决了该问题:
- 验证客户端计算机和服务器计算机都在同一域中。
- 我们需要在两台计算机上使用同一用户,或者,如果要在客户端和服务器上使用不同的用户,则需要确保客户端和服务器用户在两台计算机上均具有特权(特别是-确保它们是成员)的分布式COM用户组。
- 打开Componenet服务MMC(运行dcomcnfg)。
- 转到"我的电脑"->"属性"->"默认属性",并确保"默认授权级别"为"标识"
- 转到" COM安全性"选项卡,在"访问权限"和"启动和激活权限"中,都转到"编辑限制",然后向" COM"应用程序的客户端和服务器用户添加本地和远程访问权限
- 确保应用程序的端口135中有防火墙例外...
我希望这可以帮助你!
回答
如果PC并非同一域的两个成员,则还需要授予"匿名登录"的启动和访问权限。 "所有人"不包括此。