gpt4 book ai didi

c# - COM 对象从一个程序实例化,而不是从同一用户下运行的另一个程序实例化

转载 作者:可可西里 更新时间:2023-11-01 13:50:06 26 4
gpt4 key购买 nike

我们遇到了一个 rather strange issue使用我们的 COM 组件。该组件实现了一个众所周知的接口(interface),并被第三方闭源产品(以下简称产品 X)使用。产品 X 通过 Windows 注册表配置 - 产品 X 读取注册表并找到我们组件的类 ID。

我们的组件是使用 ATL 在 native C++ 中实现的 32 位进程内组件,我们将其注册到 64 位系统上的 COM+,以便在代理进程中激活它。

现在产品 X 无法使用我们的组件并在 Windows 事件日志中跟踪 E_ACCESSDENIED,我们还看到以下错误消息

The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID {class id of COM object here} and APPID {app id of the COM+ application here} to the user MACHINENAME\administrator SID (SID here) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.

在系统日志中。

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

OurComponent.IOrComponent component = new OurComponent.OurcomponentClass(); component.TrivialMethod();

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

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

最佳答案

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

所以有两件事可以让它起作用。 1 您的应用程序需要编译为“Com Visible”。 2 你需要注册com组件(如果还没有注册的话)

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

关于c# - COM 对象从一个程序实例化,而不是从同一用户下运行的另一个程序实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com