我正在使用两台计算机上的服务器和客户端的DCOM应用程序,这两台计算机都运行带有Service Pack 2的WinXP。在这两台计算机上,我使用相同的用户名和密码登录。
当一台计算机上的客户端调用CoCreateInstanceEx,要求另一台计算机启动服务器应用程序时,它将返回E_ACCESSDENIED。
我尝试进入dcomcnfg中的服务器应用程序的组件属性,并为所有人提供完整的权限,但这没有帮助。
如果允许此调用成功,我需要做什么?
更新:当服务器应用程序在Windows 2000机器上运行时,我不会收到此错误; CoCreateInstanceEx返回S_OK。
答案 0 :(得分:2)
是的,所以如果您的身份验证级别设置为默认值。默认设置中设置的身份验证级别是什么?只是出于兴趣。 (虽然它适用于2000个盒子的事实可能会使这个多余)
编辑:
另外:我似乎还记得在我以前玩DCOM的时候做了很多重启,所以当你对dcomcnfg设置感到满意的时候,可能会快速重启这两台机器也不会出现问题。
答案 1 :(得分:2)
如果PC不是同一个域的成员,则还需要启动和发布。访问“ANONYMOUS LOGON”的权限。 “每个人”都不包括这个。
答案 2 :(得分:1)
要检查的三件事:
1)返回dcomcnfg并尝试确保不仅访问安全性而且“启动权限”部分包含适当的安全用户或组。
2)确保将身份验证级别设置为“无”以外的其他内容
3)另外,检查在您设置的安全权限中配置的帐户是否实际可以访问该组件所在的磁盘上的位置。
编辑:
还有一个问题:您是否也首先调用CoInitialiseSecurity()?那铃响了!
EDIT2:
根据您的更新:尝试在两台XP计算机上完全删除防火墙,看看是否有所不同。您可能需要明确地让DCOM通过。
答案 3 :(得分:0)
你的Windows 2000盒子的味道是什么,顺便说一下? Professional,Server,Adv Server ......
此外,两者之间的域成员身份是否存在差异(一个域名,另一个域名不同,域名等等?)
还有一件事 - DCOM错误有时会出现在系统事件日志中 - 特别是对于对象创建 - 您是否在那里检查线索?
答案 4 :(得分:0)
我遇到了完全相同的问题。 问题发生在具有XP SP2 + OS或更新版本的计算机上。
我使用以下步骤解决了它:
验证客户端和服务器计算机是否位于同一个域中。
您需要在两台计算机上使用相同的用户,或者,如果您想在客户端和服务器中使用不同的用户,则需要确保客户端和服务器用户都在两台计算机上都有权限(特别是 - 确保它们是分布式COM用户组的成员。
open Componenet services MMC(运行dcomcnfg)。
转到我的电脑 - >属性 - >默认属性并确保默认效果级别为“识别”
转到“COM安全”选项卡,在“访问”权限和“启动和激活”权限中转到“编辑限制”,并向COM应用程序的客户端和服务器用户添加本地和远程访问权限
确保您的应用程序在端口135中有防火墙例外...
我希望这可以帮到你!