繁体   English   中英

为什么不能在 c++ 中执行来自 cmd 的“taskkill”?

[英]Why cannot execute "taskkill" from cmd in c++?

我想在 c++ 代码中从 cmd 执行taskkill 我试过两个forms:

  1. 简单的形式:
system("taskkill /IM 'example.exe' /F");
  1. 具有管理权限(因为我的进程之一具有高权限):
system("runas / profile / user:administrator \"taskkill /IM 'exmaple.exe' /F\"");

我的 c++ 程序也以管理员身份运行。 但是这些命令都没有执行成功。 问题是什么?

一个直接的解决办法是删除包含example.exe的单引号 ( ' )。
例如,而不是:

system("taskkill /IM 'example.exe' /F");

使用:

system("taskkill /IM example.exe /F");

使用双引号( " - 在这种情况下使用\转义)也可以:

system("taskkill /IM \"example.exe\" /F");

然而——
正如@PepijnKramer 上面评论的那样,您可以使用专用的 windows API 函数来执行相同的操作。 这需要更多的代码,但提供了更好的错误控制和反馈。

以下是您需要做的事情的概述:

  1. 从进程名称中获取进程 PID(见下文)。
  2. 使用OpenProcess API 打开进程以获取它的句柄,具有PROCESS_TERMINATE访问权限(见下文)。

获取 PID 然后通过名称获取进程句柄的示例: How can I get a process handle by its name in C++? .

  1. 使用带有TerminateProcess API 的句柄来终止进程。 请注意,为了使用它:

该句柄必须具有 PROCESS_TERMINATE 访问权限。

(这应该通过dwDesiredAccess参数传递给OpenProcess

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM