【问题标题】:Windows service with COM initialization is not working any more after upgrading from .NET Framework 4.5.2 to 4.8从 .NET Framework 4.5.2 升级到 4.8 后,带有 COM 初始化的 Windows 服务不再工作
【发布时间】:2020-11-03 14:12:43
【问题描述】:

我有一个使用框架 4.5.2 升级到框架 4.8 的 Windows 服务。但是现在该服务不再工作了,因为错误:System.ApplicationException: CoIntializeSecurity failed w/err 0x80010119

这是在 4.5.2 下工作但在 4.8 下不再工作的代码

public Service()
{
    // Initialize COM security
    UInt32 hResult = COMNative.CoInitializeSecurity(
    IntPtr.Zero,    // Add your security descriptor here
    -1,
    IntPtr.Zero,
    IntPtr.Zero,
    COMNative.RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
    COMNative.RPC_C_IMP_LEVEL_IDENTIFY,
    IntPtr.Zero,
    COMNative.EOAC_DISABLE_AAA | COMNative.EOAC_SECURE_REFS | 
    COMNative.EOAC_NO_CUSTOM_MARSHAL,
    IntPtr.Zero);

    if (hResult != 0)
        throw new ApplicationException(
            "CoIntializeSecurity failed w/err 0x" + hResult.ToString("X"));
}

/// <summary>
/// Called when [start].
/// </summary>
/// <param name="args">The arguments.</param>
public void OnStart(string serviceName)
{
    ILogger logger = LoggerService.GetLogger();
    logger.Info("*** START OF SERVICE ***");
    logger.Info(serviceName + " (Version " + Assembly.GetExecutingAssembly().GetName().Version.ToString() + ") starting ....");

    Guid clsidSQLEventObj = new Guid(ComponentClassId);

    // Register the SQLEvent class object on start
    UInt32 hResult = COMNative.CoRegisterClassObject(
                    ref clsidSQLEventObj,
                    new SQLEventClassFactory(),
                    COMNative.CLSCTX_LOCAL_SERVER,
                    COMNative.REGCLS_MULTIPLEUSE,
                    out _cookieSQLEventObj);

   if (hResult != 0)
       throw new ApplicationException(
                "CoRegisterClassObject failed w/err 0x" + hResult.ToString("X"));
    
}

我们已经尝试了多种安全设置,但都没有成功。

有没有人知道在这种情况下 4.5.2 和 4.8 之间有什么区别,为什么它不再工作了?

【问题讨论】:

标签: c# .net-4.5 .net-4.8


【解决方案1】:

我终于设法解决了这个问题。 我将 CoInitialize 从服务类构造函数移到 Main 方法,并将其设置为启动时要做的第一件事,从而解决了问题。

在使用 4.5.2 和 4.8 时,服务构造函数的初始化似乎存在时间差异。我搜索了很多,但找不到这两个版本之间到底有什么变化。

如果有人知道这一点,我仍然有兴趣知道这一点;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2023-03-14
    • 2022-07-07
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多