有效地杀死Windows进程

sar*_*ara 2 c++ windows qt process

我正在编写一个C++ QT桌面应用程序,旨在在Windows操作系统上运行.
此应用程序应枚举所有正在运行的进程,并将终止特定进程(由名称识别).我知道有两种方法可以做到:

  1. 使用Windows API.
  2. 使用该tasklist命令获取进程,并taskkill结束进程.

在代码风格,效率和性能方面哪个选项更好?或者有第三种选择吗?

era*_*ran 5

IMO,效率和性能不应该让您担心.你可能不会每秒杀死1000个进程,所以如果一个需要10毫秒而另一个需要100毫秒,我怀疑是否会有人关心.

因此,选择其中一个的论据主要是编程和维护的简便性.用于枚举进程的API并不是最简单的,但您可以在Web上找到许多示例(如此处所示).使用任务列表将需要获取输出并解析它.

我出于以下原因选择API:

  1. 如果操作失败,您可以获得更多信息.你会确切地知道问题的确切位置,以及它是什么.
  2. 我不确定tasklisttaskkill保证在每台Windows机器上.他们确实带有操作系统,但有人可能会认为他们扩大了攻击面或其他任何东西,然后移除它们.
  3. 解析文本容易出错.我不知道,例如,tasklist输出是否取决于操作系统区域设置.你呢?