ServicedComponent服务器激活权限被拒绝

时间:2018-09-24 12:24:08

标签: .net com+ servicedcomponent

我正在尝试用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 失败,客户端上出现权限被拒绝错误。如果我切换到激活,效果很好,但是我需要在过程外进行激活,所以服务器

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

  

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

我无法在 DCOM配置下找到相应的应用程序 {3967FB64-686C-4F93-B866-B011FEE9A6AA}

COM +应用程序下面只有示例COM 应用。但是在那里,我不确定应该进行哪些更改才能使其正常工作。

1 个答案:

答案 0 :(得分:0)

我最终添加了以下属性:

[assembly: ApplicationAccessControl(false)]

已禁用对此应用程序强制执行访问检查