我面临一个相当奇怪和非常具体的DCOM相关问题,我希望有人可能遇到它并解决它。
我试图在Windows 7机器上的EXE服务器上实例化一个COM对象(称之为W7)。 客户端驻留在Windows XP机器上(称之为WXP)。 在WXP上,login用户是域用户。 在W7上,用户是本地用户。 我(afaik)正确设置了所有DCOM权限,身份validation和帐户权限。 没有涉及防火墙。
我得到的是,COM EXE服务器进程在W7上启动,用户名我期望,但似乎甚至没有达到其WinMainfunction,并保持悬挂,永远不会死,除非我杀了它。 我可以附加一个远程debugging器(Visual Studio 2010),它会警告我这个进程可能会死锁,当我把它分解时,它会停在消息队列循环(GetMessage / Dispatch)中。
客户端得到一个(貌似有效的)指针,但是任何尝试使用它的结果都是E_ACCESSDENIED。
如果上述场景中的任何内容都发生更改,则COM对象的实例化成功并且对象的行为正确。
我知道这个机会很小,find一个答案,但任何提示是非常值得欢迎的。
谢谢。
DCOM客户端和服务器既可以是工作组上相同的本地管理员,也可以是同一个域上的域用户。
您可以使用此测试应用程序来检查您的两台机器是否配置正确: http : //support.microsoft.com/kb/259011这样,您可以确保您的机器的权限和防火墙先安装正确,没有自己的代码。
回答我自己的问题
事实证明,在客户端CoInitializeSecurity中并没有所有需要的证书……它在证书被认识之前被称为太早了。
我使用CoSetProxyBlanket(如此处所述: DCOM中的模拟工作是如何工作的? )在我正在实例化的每个组件上发现了这一点。 我调用CoSetProxyBlanket的每个组件都正常工作。 这引发了我去检查CoInitializeSecurity。
反向连接(从W7到WXP)起作用仍然很奇怪,但这是我需要做的另一项研究。 目前的问题可以结束。