gpt4 book ai didi

com - 杀死系统帐户下的 ATL COM 进程?

转载 作者:行者123 更新时间:2023-12-04 06:15:28 26 4
gpt4 key购买 nike

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

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

我已经筋疲力尽了谷歌寻找解决方案。任何人都可以帮忙吗?

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

最佳答案

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

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

  • 您的客户端没有正确释放 COM 服务器创建的所有实例。我不是 .NET 程序员,所以我不能说这是否是你应该处理的事情,或者垃圾收集是否为你做。如果您的服务由于崩溃或外部终止而在没有正确清理的情况下终止,您肯定会遇到这个问题。
  • 无论创建者出于何种原因,服务器可能会在内部增加其引用计数。这甚至可能是服务器中的错误。
  • IIRC,即使没有事件的客户端,COM 也可能让服务器运行一段时间。如果是这种情况,服务器将在几分钟后关闭。
  • 关于com - 杀死系统帐户下的 ATL COM 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318266/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com