WIN32 根据程序名(映像名称)终止外部程序

场景:

1.有时候需要调用外部程序,但是外部程序有可能崩溃挂起,这样这个进程就没法结束,所以再在下次调用前需要先结束之前调用的。

2.没考虑到权限问题,应该是只能终止当前用户启动的进程.

[cpp] view plaincopy

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. #include <Tlhelp32.h>
  5. #include <vector>
  6. void TerminateProcessByName(PCWSTR name)
  7. {
  8. DWORD pid = 0;
  9. // Create toolhelp snapshot.
  10. HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  11. PROCESSENTRY32W process;
  12. ZeroMemory(&process, sizeof(process));
  13. process.dwSize = sizeof(process);
  14. std::vector<DWORD> pids;
  15. // Walkthrough all processes.
  16. if (Process32FirstW(snapshot, &process))
  17. {
  18. do
  19. {
  20. // Compare process.szExeFile based on format of name, i.e., trim file path
  21. // trim .exe if necessary, etc.
  22. if (!wcscmp(process.szExeFile, name))
  23. {
  24. pid = process.th32ProcessID;
  25. pids.push_back(pid);
  26. }
  27. } while (Process32NextW(snapshot, &process));
  28. }
  29. CloseHandle(snapshot);
  30. size_t size = pids.size();
  31. for(size_t i = 0; i < size; ++i)
  32. {
  33. HANDLE one_process = OpenProcess(PROCESS_TERMINATE, FALSE, pids[i]);
  34. BOOL res = TerminateProcess(one_process,0);
  35. if(res)
  36. {
  37. WaitForSingleObject(one_process,1000);
  38. }
  39. }
  40. }
  41. int main(int argc, char *argv[])
  42. {
  43. printf("Hello, world\n");
  44. std::vector<DWORD> pids;
  45. TerminateProcessByName(L"notepad.exe");
  46. return 0;
  47. }
时间: 2024-10-15 14:12:00

WIN32 根据程序名(映像名称)终止外部程序的相关文章

windows下taskkill命令简介

1.简介 使用该工具可以按照进程 ID (PID) 或映像名称终止任务. 2.语法 TASKKILL [/S system [/U username [/P [password]]]]         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 2.1 参数列表:    /S    system           指定要连接的远程系统.    /U    [domain\]user    指定应该在哪个用户上下文执行这

TASKKILL命令使用方法

TASKKILL [/S system [/U username [/P [password]]]]          { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 描述:     使用该工具按照进程 ID (PID) 或映像名称终止任务. 参数列表:     /S    system           指定要连接的远程系统. /U    [domain\]user    指定应该在哪个用户上下文执行这个命令. /P  

windows7命令帮助大全

有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库中的属性以控制启动加载.CACLS 显示或修改文件的访问控制列表(ACL).CALL 从另一个批处理程序调用这一个.CD 显示当前目录的名称或将其更改.CHCP 显示或设置活动代码页数.CHDIR 显示当前目录的名称或将其更改.CHKDSK 检查磁盘并显示状态报告.CHKNTFS 显示或修改启动时间

windows命令——taskkill

C:\Users\Administrator>taskkill /? TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 描述: 使用该工具按照进程 ID (PID) 或映像名称终止任务. 参数列表: /S system 指定要连接的远程系统. /U [domain\]user 指定应该在哪个用户上下文执行这个命令. /P [p

DOS命令详解

DOS命令详解 命令 \? 可以进入命令帮助 1.md命令创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKDIR 会在路径中创建中级目录.例如: 假设 \a 不存在,那么: mkdir \a\b\c\d 与: mkdir \a chdir \a mkdir b chdir b mkdir c chdir c mkdir d 相同.如果扩展被停用,则需要键入 mkdir \a\b\c\d. 例子:md \a

CMD命令利用tasklist与taskkill关闭程序

昨天远程服务器后,服务器无故卡住了,鼠标各种延迟与无反应,想在进程管理器里关闭程序也卡住,想点击重启系统也卡死无反应.纠结后win+R打开了cmd用shutdown重启才算搞定.重启期间思考了下,如何用cmd命令来管理系统进程,搜索后得到用tasklist与taskkill十分方便,记录如下: cmd命令输入 tasklist /? 后得到 TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [

Tasklist and TaskKill

C:\Users\Administrator>tasklist /? TASKLIST [/S system [/U username [/P [password]]]]         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH] 描述:    该工具显示在本地或远程机器上当前运行的进程列表. 参数列表:   /S     system           指定连接到的远程系统. /U     [domain\]user  

window下用taskkill杀死进程

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 描述: 使用该工具按照进程 ID (PID) 或映像名称终止任务. 参数列表: 1. /S system 指定要连接的远程系统. 2. /U [domain\]user 指定应该在哪个用户上下文执行这个命令. 3. /P [password] 为提供的用户上下文指定密码.如果忽

Nginx 环境搭建 (windows)

Nginx 环境搭建 (windows) 资源 # nginx在线文档和支持 For online documentation and support please refer to nginx.org # nginx企业版网址 nginx.com # nginx书籍 https://www.nginx.com/resources/library/complete-nginx-cookbook/?utm_source=nginxorg&utm_medium=homepagebanner&u