5

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

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

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

我需要做什么才能让这个调用成功?

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

4

5 回答 5

2

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

编辑:

另外:我似乎记得以前玩/使用 DCOM 时进行了很多重启,所以当您对 dcomcnfg 设置感到满意时,可能快速重启两台机器也不会出错。

于 2008-08-21T19:42:27.400 回答
2

如果 PC 不是同一域的两个成员,您还需要授予“匿名登录”的启动和访问权限。“所有人”不包括这个。

于 2010-05-18T07:37:29.603 回答
1

要检查的三件事:

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

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

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

编辑:

还有一个:你是不是也先调用 CoInitialiseSecurity() ?这敲响了警钟!

编辑2:

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

于 2008-08-21T19:31:58.983 回答
0

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

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

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

于 2009-01-14T21:33:22.797 回答
0

我有同样的问题。该问题发生在具有 XP SP2+ 操作系统或更新版本的机器上。

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

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

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

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

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

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

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

我希望这可以帮助你!

于 2010-02-01T15:45:06.370 回答