Lv.的博客

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

场景:

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

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

 

 

[cpp] view plaincopy
 
  1. #include <stdio.h>  
  2. #include <string.h>  
  3.   
  4. #include <windows.h>  
  5. #include <Tlhelp32.h>  
  6.   
  7. #include <vector>  
  8.   
  9. void TerminateProcessByName(PCWSTR name)  
  10. {  
  11.     DWORD pid = 0;  
  12.       
  13.     // Create toolhelp snapshot.  
  14.     HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
  15.     PROCESSENTRY32W process;  
  16.     ZeroMemory(&process, sizeof(process));  
  17.     process.dwSize = sizeof(process);  
  18.   
  19.     std::vector<DWORD> pids;  
  20.     // Walkthrough all processes.  
  21.     if (Process32FirstW(snapshot, &process))  
  22.     {  
  23.         do  
  24.         {  
  25.             // Compare process.szExeFile based on format of name, i.e., trim file path  
  26.             // trim .exe if necessary, etc.  
  27.             if (!wcscmp(process.szExeFile, name))  
  28.             {  
  29.                pid = process.th32ProcessID;   
  30.                pids.push_back(pid);  
  31.             }  
  32.         } while (Process32NextW(snapshot, &process));  
  33.     }  
  34.   
  35.     CloseHandle(snapshot);  
  36.       
  37.     size_t size = pids.size();  
  38.     for(size_t i = 0; i < size; ++i)  
  39.     {  
  40.         HANDLE one_process = OpenProcess(PROCESS_TERMINATE, FALSE, pids[i]);  
  41.         BOOL res = TerminateProcess(one_process,0);  
  42.         if(res)  
  43.         {  
  44.             WaitForSingleObject(one_process,1000);  
  45.         }  
  46.     }  
  47. }  
  48.   
  49. int main(int argc, char *argv[])  
  50. {  
  51.     printf("Hello, world\n");  
  52.       
  53.     std::vector<DWORD> pids;  
  54.     TerminateProcessByName(L"notepad.exe");  
  55.   
  56.     return 0;  
  57. }  
posted @   Avatarx  阅读(337)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示