我正在编写一个 C++ QT 桌面应用程序,旨在在 Windows 操作系统上运行。
此应用程序应枚举所有正在运行的进程,并将终止特定进程(按名称识别)。我知道有两种方法可以做到:
- 使用 Windows API。
- 使用
tasklist
命令获取进程,并taskkill
结束进程。
在代码风格、效率和性能方面哪个选项更好?还是有第三种选择?
效率和性能不应该让你担心,IMO。你可能不会在一秒钟内杀死 1000 个进程,所以如果一个需要 10 毫秒,另一个需要 100 毫秒,我怀疑有人会关心。
因此,选择其中之一的论据主要是易于编程和维护。枚举进程的 API 并不是最简单的,但您可以在网络上找到许多示例(如此处)。使用 tasklist 将需要获取输出并解析它。
出于以下原因,我会选择 API:
tasklist
并且taskkill
保证在每台 Windows 机器上都有。它们确实随操作系统一起提供,但有人可能会认为它们扩大了攻击面或其他任何东西,并将它们删除。tasklist
' 的输出是否取决于操作系统区域设置。你?当然,您使用的是 Windows Api。这比使用外部 exe 杀死进程要好得多。您可以使用需要进程 ID 的OpenProcess获取进程句柄。打开后,您可以使用TerminateProcess提供进程句柄。