您的位置:首页 > 编程语言 > C语言/C++

[Windows]_[C/C++]_[WIN32根据程序名(映像名称)终止外部程序]

2013-10-26 17:51 309 查看
场景:

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

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

#include <stdio.h>
#include <string.h>

#include <windows.h>
#include <Tlhelp32.h>

#include <vector>

void TerminateProcessByName(PCWSTR name)
{
DWORD pid = 0;

// Create toolhelp snapshot.
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32W process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);

std::vector<DWORD> pids;
// Walkthrough all processes.
if (Process32FirstW(snapshot, &process))
{
do
{
// Compare process.szExeFile based on format of name, i.e., trim file path
// trim .exe if necessary, etc.
if (!wcscmp(process.szExeFile, name))
{
pid = process.th32ProcessID;
pids.push_back(pid);
}
} while (Process32NextW(snapshot, &process));
}

CloseHandle(snapshot);

size_t size = pids.size();
for(size_t i = 0; i < size; ++i)
{
HANDLE one_process = OpenProcess(PROCESS_TERMINATE, FALSE, pids[i]);
BOOL res = TerminateProcess(one_process,0);
if(res)
{
WaitForSingleObject(one_process,1000);
}
}
}

int main(int argc, char *argv[])
{
printf("Hello, world\n");

std::vector<DWORD> pids;
TerminateProcessByName(L"notepad.exe");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: