C# COM对象从一个程序实例化,但不能从同一用户下运行的另一个程序实例化

C# COM对象从一个程序实例化,但不能从同一用户下运行的另一个程序实例化,c#,windows,com,com-interop,com+,C#,Windows,Com,Com Interop,Com+,我们的COM组件遇到了一个问题。该组件实现了一个众所周知的接口,并由第三方封闭源代码产品(以下简称产品X)使用。产品X是通过Windows注册表配置的-产品X读取注册表并查找组件的类id 我们的组件是在ATC中用C++实现的在本地C++中使用的32位,并在64位系统上登记COM+,以便在代理过程中激活。 现在,产品X无法使用我们的组件,并在Windows事件日志中跟踪E_ACCESSDENIED,我们还看到以下错误消息 应用程序特定的权限设置不会将CLSID{class id of COM ob

我们的COM组件遇到了一个问题。该组件实现了一个众所周知的接口,并由第三方封闭源代码产品(以下简称产品X)使用。产品X是通过Windows注册表配置的-产品X读取注册表并查找组件的类id

我们的组件是在ATC中用C++实现的在本地C++中使用的32位,并在64位系统上登记COM+,以便在代理过程中激活。 现在,产品X无法使用我们的组件,并在Windows事件日志中跟踪

E_ACCESSDENIED
,我们还看到以下错误消息

应用程序特定的权限设置不会将CLSID{class id of COM object here}和APPID{app id of The COM+application here}的COM服务器应用程序的本地激活权限从地址LocalHost(使用LRPC)授予用户MACHINENAME\administrator SID(SID here)。可以使用组件服务管理工具修改此安全权限

在系统日志中

这看起来像是权限问题。因此,我们用C#编写了一个“Hello,world”程序,它
new
s是一个COM组件,并从中调用一个简单(永不失败)的方法:

OurComponent.ioourComponent组件=新的OurComponent.OurcomponentClass(); component.method()

当该程序从与产品X相同的帐户运行时,它可以正常工作-组件被实例化,我们甚至可以在COM+控制台中看到“带加号的绿球”旋转


因此,我们有两个程序在同一台机器上以相同的用户帐户运行,一个可以实例化COM组件,另一个不能。原因可能是什么?

我认为您缺少应用程序的配置

因此,有两件事可以让它起作用。1您的应用程序需要编译为“Com可见”。2您需要注册com组件(如果尚未注册)


转到开始->管理工具->组件服务。展开组件服务、计算机、我的计算机、DCOM配置。向下滚动并找到应用程序。右键->单击->属性并选择安全选项卡。您将在此处看到一些选项—第一个块启动和激活权限—确保选中“自定义”单选按钮,然后单击“编辑”。现在,为您使用的帐户授予启动、激活以及远程启动/激活权限。重新启动机器(或重新启动服务/应用程序),希望它能工作。

我很好奇为什么这会遭到否决。啊,那些永不停止的COM访问拒绝。我同情你。。。我没有任何真正的建议,但我想知道:1)你知道X是如何创建实例的吗?他们可能在合著信息里有些古怪。2) 如果X以管理员身份运行,是否有任何更改?3) 您的Hello World是否与X具有相同的比特数?(没关系,但谁知道呢)。@eran:不知道X是如何创建实例的。X和Hello world都是以管理员身份运行的,并且都有相同的比特数。也许你应该尝试另一种方法——创建一个非平凡的测试应用程序,使用实例创建的安全设置,看看是什么让你拒绝。如果您不能更改X,您显然还必须找到解决方案,但它可能会指向一个特定的设置。@eran:是否有代码片段显示类似于您建议我做的事情?