我正在编写一个C ++ QT桌面应用程序,打算在Windows操作系统上运行。
此应用程序应枚举所有正在运行的进程,并将杀死一个特定进程(按名称识别)。 有两种方法我知道这样做:
使用Windows API。
使用tasklist命令来获取进程,并使用taskkill来结束进程。
在代码风格,效率和性能方面哪个选项更好? 还是有第三个select?
在C#中执行相同环境中的多个命令
如何在VB6中执行进一步的代码之前等待shell进程完成
MSI安装程序,64位操作系统,写入 windows system32 inetsrv文件夹
killproc和pidofproc在Linux上
IMO的效率和性能不应该让你担心。 你可能不会每秒杀死1000个进程,所以如果一个需要10毫秒,另一个需要100毫秒,我怀疑有人会关心。
所以,选择其中一个的论据大多是编程和维护的简单方法。 枚举进程的API不是最简单的,但是你可以在网上找到很多例子(就像这里 )。 使用任务列表将需要获取输出并解析它。
我会为这些原因去API:
如果操作失败,您可以获得更多信息。 你会确切地知道问题在哪里,它是什么。
我不确定tasklist和taskkill是保证在每台Windows机器上。 他们确实带着操作系统,但有人可能会认为他们扩大了攻击面或其他任何东西,并将其删除。
解析文本是容易出错的。 我不知道,例如,如果tasklist的输出取决于操作系统区域设置。 你做?
其实我和WMI一起工作,我读了你可以用WMI杀死进程
终止Win32_Process类的方法
(只是为了信息:))
我在其他应用程序中使用winAPI
当然,你使用Windows Api。 哪种方法比使用外部exe来杀死进程要好。 你可以使用OpenProcess获取进程句柄,这需要你一个进程ID。 一旦你打开你可以使用TerminateProcess给出一个进程句柄。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。