【问题标题】:How to root cause why COM+ is locking DLLs?如何找出 COM+ 锁定 DLL 的根本原因?
【发布时间】:2020-01-20 19:47:52
【问题描述】:

我有一个必须安装在 COM+ 中的应用程序。通过 RegSvcs 安装工作正常,但是当我尝试卸载应用程序时,一些 DLL 被锁定并保留在安装文件夹中。请注意,这只发生在我调用 COM+ 应用程序之后;否则卸载运行顺利。

我的应用程序需要全新安装和退出,但我很难确定这些 DLL 被锁定的原因。下面是锁定的第三方 DLL 的屏幕截图;与我的应用程序对应的两个没有显示。

我的程序集被标记为非 ComVisible,派生自 ServicedComponent 的单个类暴露给 COM+。我尝试在调用完成后强制进行垃圾收集,但这似乎没有任何区别。所以,一些问题:

  • 是否可以安全地假设这是由于 IDisposable 在某处的不正确实施而发生的,或者可能是其他原因?
  • 我应该假设每个锁定的 DLL 都存在一个单独的问题,还是单个类的问题导致所有这些 DLL 都被锁定?
  • 有什么建议可以调试这个吗?

任何帮助将不胜感激 - 感觉完全失去了这个。

【问题讨论】:

  • 您可以尝试使用handle 实用程序来检查实际上是什么阻止了您的文件。然后继续对根本案例进行进一步调查。您确定您的应用程序已正确关闭吗?

标签: c# .net com-interop com+ component-services


【解决方案1】:

我明白了...我需要以下属性:

[assembly: ApplicationAccessControl(Value=false, AccessChecksLevel=AccessChecksLevelOption.ApplicationComponent)]
[assembly: ApplicationActivation(ActivationOption.Server)]

调用从系统帐户路由到我的应用程序,但没有第二个属性,它显然是在创建者进程下激活的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多