sha*_*oth 5 c# windows com com+ com-interop
我们的COM组件遇到了一个相当奇怪的问题.该组件实现了众所周知的接口,并由第三方闭源产品(以下称为产品X)使用.产品X通过Windows注册表配置 - 产品X读取注册表并查找组件的类ID.
我们的组件是使用ATL在本机C++中实现的32位进程,我们在64位系统上使用COM +注册它,以便在代理进程中激活它.
现在,产品X无法E_ACCESSDENIED在Windows事件日志中使用我们的组件和跟踪,我们还看到以下错误消息
特定于应用程序的权限设置不会将具有CLSID {此处为COM对象的类ID}的COM服务器应用程序的本地激活权限和此处的APPID {此处为COM +应用程序的应用程序ID}授予用户MACHINENAME\administrator SID(此处为SID)地址LocalHost(使用LRPC).可以使用组件服务管理工具修改此安全权限.
在系统日志中.
这看起来像权限问题.所以我们在C#中制作了一个"Hello,world"程序,它new是一个COM组件,并从中调用一个简单的(永不失败的)方法:
OurComponent.IOurComponent component = new OurComponent.OurcomponentClass(); component.TrivialMethod();
当该程序从与产品X相同的帐户运行时,它可以正常工作 - 组件被实例化,我们甚至在COM +控制台中看到"带有加号的绿球"旋转.
因此,我们在相同的用户帐户下运行同一台计算机上的两个程序,一个可以实例化COM组件而另一个不能.可能是什么原因?
我认为您缺少该应用程序的配置。
因此,要实现这一点,需要做两件事。1 您的应用程序需要编译为“Com Visible”。2 您需要注册com组件(如果尚未注册)
转到开始 -> 管理工具 -> 组件服务。展开组件服务、计算机、我的电脑、DCOM 配置。向下滚动并找到该应用程序。右键 -> 单击 -> 属性并选择安全选项卡。您将在此处看到一些选项 - 第一个块启动和激活权限 - 确保选中“自定义”单选按钮,然后单击“编辑”。现在,授予您正在使用的帐户启动、激活以及远程启动/激活权限。重新启动机器(或重新启动服务/应用程序),希望它能正常工作。
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |