我正面临一个相当奇怪和非常具体的DCOM相关问题,我希望有人可能遇到过它并解决它。Windows XP和Windows 7之间的DCOM互操作性
我想在Windows 7机器上的EXE服务器上实例化一个COM对象(称之为W7)。客户端驻留在Windows XP机器上(称之为WXP)。在WXP上,登录用户是域用户。在W7上,用户是本地用户。我(afaik)正确设置了所有DCOM权限,身份验证和帐户权限。没有涉及防火墙。
我得到的只是COM7E服务器进程在W7上启动,用户名我期望,但似乎甚至没有达到它的WinMain函数,并且保持挂起,除非我杀死它,否则永远不会死亡。我可以附加一个远程调试器(Visual Studio 2010),它会警告我这个进程可能会死锁,当我将它分解时,它会停在消息队列循环(GetMessage/Dispatch)中。
客户端得到一个(貌似有效的)指针,但是任何尝试使用它的结果都是E_ACCESSDENIED。
如果上述场景中的任何内容都发生更改,则COM对象的实例化会成功并且对象的行为正确。
我知道找到答案的机会很小,但任何提示都非常受欢迎。
谢谢。
感谢您的回复。我会尽快尝试并发布结果。 令人困惑的是,相反的情况 - 客户端在W7上(不在域中),服务器在WXP上(在域中) - 工作正常!它可以与本地WXP凭证(超出域)一起使用,也可以与域凭证一起使用。 – racanu 2012-07-21 06:51:47
我快速浏览了这篇文章,并注意到客户端没有取得凭证(即用户名/密码)。这使我认为它不提供CoInitializeSecurity中的任何AuthInfo,这意味着它将匿名连接到服务器。我没有为我的服务器配置这种情况。为了实验的目的,我会这样做,但我认为这不会是生产代码可以接受的解决方案。 – racanu 2012-07-21 07:01:19
我发现这篇文章,我最初错过了,给了我一些想法,我可能会尝试:http:// stackoverflow。com/questions/6123301/how-do-impersonation-in-dcom-work – racanu 2012-07-21 07:11:30