【问题标题】:ServicedComponent server activation permission deniedServicedComponent 服务器激活权限被拒绝
【发布时间】:2018-09-24 12:24:08
【问题描述】:

我正在尝试在 C# 中开发一个组件,该组件将由 C++ 客户端在进程外调用和使用。为此,我尝试将其实现为服务器激活的 ServicedComponent。

组件如下所示:

[assembly: ApplicationName("Sample COM")]
[assembly: ApplicationID("3967FB64-686C-4F93-B866-B011FEE9A6AA")]
[assembly: AssemblyKeyFile("SampleCOM.snk")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: Description("Testing ServicedComponents")]

namespace SampleCOM
{
    [ComVisible(true)]
    public interface ICalculator
    {
        double Add(double first, double second);
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("SampleCOM.Calculator")]
    [Guid("AA12A3DA-51A2-4F3D-90FF-E7C00E77800D")]
    public class Calculator : ServicedComponent, ICalculator
    {
        public double Add(double first, double second)
        {
            return first + second;
        }
    }
}

代码编译良好(VS 2017),我可以使用以下方法注册它:

regsvcs /fc SampleCOM.dll

现在,我正在尝试看看它是如何工作的。为此,我使用的是旧的、良好的 VB6.0 代码:

Private Sub Command1_Click()
    On Error GoTo ErrorHandler

    Dim obj As SampleCOM.Calculator    
    Dim res As Double

    Set obj = CreateObject("SampleCOM.Calculator")

    res = obj.Add(1.2, 3.4)

    MsgBox "Done " & CStr(res)

    GoTo Cleanup   

ErrorHandler:
    MsgBox Err.Description

Cleanup:
    Set obj = Nothing
End Sub

在这里我无法让它工作。 CreateObject 失败,客户端出现 Permission denied 错误。如果我切换到 library 激活它可以正常工作,但我需要让它在进程外,所以 server

在事件日志中,我可以看到以下条目:

应用程序特定的权限设置不授予本地 具有 CLSID 的 COM 服务器应用程序的激活权限 {AA12A3DA-51A2-4F3D-90FF-E7C00E77800D} 和 APPID {3967FB64-686C-4F93-B866-B011FEE9A6AA} 到用户 MYDOMAIN\ZUSER SID (S-1-5-21-126838783-1048989290-1062434389-134100) 来自地址 在应用程序容器中运行的 LocalHost(使用 LRPC) 不可用的 SID(不可用)。此安全权限可以是 使用组件服务管理工具进行修改。

我在 DCOM Config 下找不到相应的应用程序 {3967FB64-686C-4F93-B866-B011FEE9A6AA}

COM+ 应用程序 下只有Sample COM 应用程序。但是在那里,我不确定应该改变什么才能使其正常工作。

【问题讨论】:

    标签: .net com+ servicedcomponent


    【解决方案1】:

    我最终添加了以下属性:

    [assembly: ApplicationAccessControl(false)]
    

    这使得对此应用程序执行访问检查被禁用。

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多