2

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

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

在代码风格、效率和性能方面哪个选项更好?还是有第三种选择?

4

3 回答 3

6

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

因此,选择其中之一的论据主要是易于编程和维护。枚举进程的 API 并不是最简单的,但您可以在网络上找到许多示例(如此)。使用 tasklist 将需要获取输出并解析它。

出于以下原因,我会选择 API:

  1. 如果操作失败,您可以获得更多信息。您将确切地知道问题出在哪里,以及它是什么。
  2. 我不确定tasklist并且taskkill保证在每台 Windows 机器上都有。它们确实随操作系统一起提供,但有人可能会认为它们扩大了攻击面或其他任何东西,并将它们删除。
  3. 解析文本很容易出错。例如,我不知道tasklist' 的输出是否取决于操作系统区域设置。你?
于 2012-07-05T07:45:36.673 回答
0

实际上我使用 WMI 并且我读到你可以使用 WMI 杀死进程

Win32_Process 类的终止方法

(仅供参考:))

我在其他应用程序中使用 winAPI

于 2012-07-05T07:44:11.823 回答
0

当然,您使用的是 Windows Api。这比使用外部 exe 杀死进程要好得多。您可以使用需要进程 ID 的OpenProcess获取进程句柄。打开后,您可以使用TerminateProcess提供进程句柄。

于 2012-07-05T07:44:23.087 回答