我正在使用两台计算机上的服务器和客户端的DCOM应用程序,这两台计算机都运行带有Service Pack 2的WinXP。在这两台计算机上,我使用相同的用户名和密码登录。

当一台计算机上的客户端调用CoCreateInstanceEx,要求另一台计算机启动服务器应用程序时,它将返回E_ACCESSDENIED。

我尝试进入dcomcnfg中的服务器应用程序的组件属性,并为所有人提供完整的权限,但这没有帮助。

要使此调用成功,我需要做什么?

更新:当服务器应用程序在Windows 2000机器上运行时,我不会收到此错误; CoCreateInstanceEx返回S_OK。

===============>>#1 票数:2

是的,所以如果您的身份验证级别设置为默认值。 默认设置中设置的身份验证级别是什么? 只是出于兴趣。 (虽然它适用于2000个盒子的事实可能会使这个多余)

编辑:

另外:我似乎记得在我以前玩DCOM的时候做了很多重启,所以当你对dcomcnfg设置感到满意时,也许你可以快速重启这两台机器。

===============>>#2 票数:2

如果PC不是同一域的成员,则还需要为“ANONYMOUS LOGON”授予启动和访问权限。 “每个人”都不包括这个。

===============>>#3 票数:1

要检查的三件事:

1)返回dcomcnfg并尝试确保不仅访问安全性而且“启动权限”部分包含适当的安全用户或组。

2)确保将身份验证级别设置为“无”以外的其他级别

3)还要检查在您设置的安全权限中配置的帐户是否实际可以访问该组件所在的磁盘上的位置。

编辑:

还有一个问题:您是否也首先调用CoInitialiseSecurity()? 那铃响了!

EDIT2:

根据您的更新:尝试在两台XP计算机上完全删除防火墙,看看是否有所作为。 您可能需要明确地让DCOM通过。

===============>>#4 票数:0

我有同样的问题。 问题发生在具有XP SP2 + OS或更高版本的计算机上。

我使用以下步骤解决了它:

  1. 验证客户端和服务器计算机是否位于同一域中。

  2. 您需要在两台计算机中使用相同的用户,或者,如果要在客户端和服务器中使用不同的用户,则需要确保客户端和服务器用户都在两台计算机上都有权限(特别是 - 确保它们是成员分布式COM用户组。

  3. open Componenet服务MMC(运行dcomcnfg)。

  4. 转到我的电脑 - >属性 - >默认属性,并确保默认Impersenation级别为“识别”

  5. 转到“COM安全”选项卡,在“访问”权限和“启动和激活”权限中转到“编辑限制”,并向COM应用程序的客户端和服务器用户添加“本地”和“远程”访问权限

  6. 确保您的应用程序在端口135中有防火墙例外...

我希望这可以帮助你!

===============>>#5 票数:0

什么是Windows 2000盒子的味道,顺便说一下? 专业,服务器,高级服务器......

此外,两者之间的域成员资格是否存在差异(一个在域上,另一个不在,不同的域等等?)

还有一件事 - DCOM错误有时会出现在系统事件日志中 - 特别是对于对象创建 - 您是否在那里检查线索?

  ask by Isaac Moses translate from so

未解决问题?本站智能推荐: