C#COM Interop,尝试访问远程COM服务器获取0x80070005错误

时间:2012-06-07 05:26:59

标签: c# .net com com+ dcom

我在c#中编写了一个WPFApplication来访问COM组件。我在我的应用程序中添加了对COM组件的引用。当我在同一台机器上同时拥有客户端(我的应用程序)和服务器(com)时,它按预期工作。 问题是他们在不同的机器上。两台机器都是相同的,我的意思是有Windows 7操作系统。并且都在同一个域上。我尝试用下面的代码创建一个com组件的实例,它没有给我任何错误

IPDSIntf test; 
string clsId = "85689616-277B-4E00-9A5E-19AD78E7E0E2";
var type = Type.GetTypeFromCLSID(new Guid(clsId), MachineName, true);
                var COMObject = Activator.CreateInstance(type);
                test = (IPDSIntf)COMObject;

现在我调用COM中的任何方法。说 test.Connect(clientId,errorCode),我收到异常'访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))'。

设置了许多权限,在服务器计算机上为我的用户帐户授予了管理员权限,将我的帐户添加到“分布式COM用户”组等...但仍然遇到同样的问题。对于所有类型的用户(匿名,网络,每个人......),通过DCOMCNFG以及谷歌搜索时看到的所有内容,在服务器计算机的COM安全选项中提供“本地和远程”访问。客户端和服务器中的防火墙都已关闭。

现在没有选择尝试了。我没时间修复它,已经花了4天时间用Google搜索。但没有运气。

还有一件事,是我在DCOMCNFG中看不到我的COM,意味着它没有注册?可能是什么原因。我相信机器中的所有COM组件都将在组件服务中注册。需要对此进行一些澄清,因为我怀疑它与我的问题有一些关系。

先谢谢, Nishitha

2 个答案:

答案 0 :(得分:0)

嗨,这个错误是给我做同样的事情,但在Excel应用程序上。我发现excel COM实际上是一个32位的,需要访问32位DECOM配置。

您可以通过在运行中输入“comexp.msc / 32”命令来访问32位DECOM配置。

然后你会找到“Microsoft xxx Application”。在我的情况下,它是在ExcelOM配置下的Microsoft Excel应用程序。在属性上,我已将“身份”选项卡中的所有证券设置为“自定义和身份”为“交互式用户”。

然后它对我有用。希望这对你也有帮助。

答案 1 :(得分:0)

我已回答你问题的某些部分。

您的组件未在DCOM中列出,可能是因为它可能是Activex dll。请按照这些步骤将其列在dcom中。

开始 - >运行 - > oleview - >对象类 - >所有对象(展开) 在左窗格中选择您的COM。单击右窗格中的Implementation选项卡,然后选中“Use Surrogate Process” 关闭oleview和opn dcomcnfg,你的COM可能会在那里列出。

我的设置完全相同,并且面临完全相同的错误 0x80070005 ,并尝试了所有可用的配置。请告诉我您是否找到了克服此访问被拒绝问题的根本原因。我已经花了4天时间: - )