【问题标题】:Kill A ATL COM Process Under SYSTEM Account?杀死 SYSTEM 帐户下的 ATL COM 进程?
【发布时间】:2011-11-11 04:59:24
【问题描述】:

我有一个在本地系统帐户下运行的 .NET Window 服务。然后,此服务使用 COM 互操作运行在 Visual Studio 6 上以 ATL 编写的 COM 组件。然后,此 COM 组件在 SYSTEM 帐户下运行。我知道我可以冒充另一个帐户,但现在我想把东西留在原处。

问题是windows服务停止后,COM组件还在运行。我也无法终止该过程。任务管理器不会杀死它,所以我从命令行尝试了 TaskKill。这甚至说它成功终止了进程,但是当我检查任务管理器时它仍在运行。我尝试过 PSKill,但显示访问被拒绝。

我已经用尽了 Google 的精力来寻找解决方案。有人可以帮忙吗?

另外,为什么它仍然在运行?

【问题讨论】:

    标签: com atl kill kill-process


    【解决方案1】:

    杀死进程只是权限问题。假设使用 UAC 的 Vista/7,如果您不是以管理员身份运行,您将无法终止系统进程。注意 - 成为本地管理员组的成员是不够的。您必须启动任务管理器/进程资源管理器/pskill 或使用“以管理员身份运行”的任何东西才能以管理权限实际运行它们。否则,您只是普通用户,您会被拒绝。

    至于 COM 服务器一直存在:COM 服务器有一个引用计数,它们只有在计数降至 0 后才会自行关闭。在您的情况下,服务器可能由于以下几个原因而无法关闭:

    1. 您的客户端未正确释放 COM 服务器创建的所有实例。我不是 .NET 程序员,所以我不能说这是否是你应该注意的事情,或者垃圾收集是否为你做这件事。如果您的服务因崩溃或外部终止而没有正确清理而终止,您肯定会遇到这个问题。
    2. 服务器可能会在内部增加其引用计数,无论创建者考虑什么原因。这甚至可能是服务器中的错误。
    3. IIRC,即使没有活动的客户端,COM 也可能让服务器运行一段时间。如果是这种情况,服务器将在几分钟后关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多