TerminateMySelf

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

bool Application::TerminateMySelf()
{
//获取自身线程id
DWORD _PID;
_PID=::GetCurrentProcessId();
printf("ProcessId:%d\n",_PID);

//获取当前程序的完全路径,返回路径长度
TCHAR tcCurAppPath[MAX_PATH] = {0};
DWORD dPathLength = GetModuleFileName(NULL, tcCurAppPath, MAX_PATH);

//检索系统每个进程的进程标识,返回0失败
DWORD adwProcessIds[1024] = {0};
DWORD dwProcessIdCount = 0;
EnumProcesses(adwProcessIds, sizeof(adwProcessIds), &dwProcessIdCount);

//轮询每个进程
for (DWORD i = 0; i < dwProcessIdCount; i++)
{
//打开进程
HANDLE hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
adwProcessIds[i]);

if (hProcess != NULL)
{
//获取handle完整路径
HMODULE hModule = NULL;
DWORD dwNeeded = 0;
TCHAR tcFileName[MAX_PATH] = {0};
GetModuleFileNameEx(hProcess, hModule, tcFileName, MAX_PATH);

//openProcess产生的handle必须关闭
CloseHandle (hProcess);

if (0 == _tcsicmp(tcCurAppPath, tcFileName) && adwProcessIds[i] != _PID)
{
//根据线程id重新打开handle,注意权限
HANDLE hClose = OpenProcess(PROCESS_ALL_ACCESS,TRUE,adwProcessIds[i]);

printf("程序已经启动,开始结束前一进程。\n");

//强制结束线程
BOOL bTerminate = TerminateProcess(hClose,-1);
CloseHandle (hClose);

if(!bTerminate)
{
printf("结束进程失败,错误代码:%d\n",GetLastError());
return false;
}
else
{
printf("前一进程已结束,重新进入程序!\n");
return true;
}
}
}
}
return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值