Windows XP和Windows 7之间的DCOM互操作性



我面临着一个相当奇怪且非常具体的DCOM相关问题,我希望有人可能已经遇到并解决了它。

我正在尝试在Windows7机器上的EXE服务器中实例化COM对象(称之为W7)。客户端位于Windows XP机器上(称为WXP)。在WXP上,登录的用户是域用户。在W7上,用户是本地用户。我已经(afaik)正确设置了所有DCOM权限、身份验证和帐户权限。不涉及防火墙。

我得到的只是COM EXE服务器进程在W7上启动,使用我期望的用户名,但似乎甚至没有达到其WinMain函数,并且保持挂起状态,除非我杀死它,否则永远不会停止。我可以将远程调试器(Visual Studio 2010)附加到它,它会警告我进程可能会死锁,当我破坏它时,它会在消息队列循环(GetMessage/Dispatch)中停止。

客户端得到一个(看似有效的)指针,但任何使用它的尝试都会导致E_ACCESSDENIED。

如果上面场景中的任何内容发生了更改,则COM对象的实例化成功,并且对象的行为正确。

我知道找到答案的机会很小,但任何提示都是非常受欢迎的。

谢谢。

DCOM客户端和服务器需要是工作组上的同一本地管理员,或者是同一域上的域用户。

您可以使用此测试应用程序检查您的两台机器是否配置正确:http://support.microsoft.com/kb/259011通过这种方式,您可以确保在没有自己的代码的情况下,首先正确设置了机器的权限和防火墙。

回答我自己的问题。。。

事实证明,在客户端中,CoInitializeSecurity根本没有所需的所有凭据。。。在证书公布之前,它被调用得太早了。

我在对我正在实例化的每个组件使用CoSetProxyBlanket(如下所述:DCOM中的模拟是如何工作的?)后发现了这一点。我调用CoSetProxyBlanket的每个组件都正常工作。这促使我去仔细检查CoInitializeSecurity。

反向连接(从W7到WXP)起作用仍然很奇怪,但这是我需要做的另一项研究。当前的问题可以结束。

最新更新