1

我有一个用 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 天时间在谷歌上搜索。但没有运气。

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

提前致谢, Nishitha

4

2 回答 2

0

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

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

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

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

于 2012-06-07T06:00:28.763 回答
0

我已经回答了你问题的一部分。

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

Start-->Run-->oleview-->Object Classes-->All Objects (Expand) 在左侧窗格中选择您的 COM。单击右窗格上的实施选项卡并选中“使用代理进程”关闭 oleview 和 opn dcomcnfg,您的 COM 可能会列在那里。

我有完全相同的设置并面临完全相同的错误0x80070005并尝试了所有可能的配置。请让我知道您是否找到了解决此访问被拒绝问题的根本原因。我已经在这上面花了 4 天 :-)

于 2012-08-21T13:06:14.277 回答