Terminate出现的问题,调试断点运行是ok的,直接运行就失败,是什么原因呢?

时间:2022-11-26 15:34:44
代码是这样的的。
#include <iostream>
#include <Windows.h>
#include "ToolHelp.h"
#include "Shlobj.h"
#include "stdio.h"
//#define FILE_PATH TEXT("C:\\Documents and Settings\\Administrator.B0DE38CA2E644F4\\Local Settings\\Application Data\\IconCache.db")
//通过进程ID获取进程句柄

HANDLE GetProcessHandle(int nID)
{
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
}

//通过进程名获取进程句柄
HANDLE DelProcessByName(LPCTSTR pName)
{
//HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
CToolhelp thProcesses(TH32CS_SNAPPROCESS);

PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = thProcesses.ProcessFirst(&pe); fOk; fOk = thProcesses.ProcessNext(&pe)) {
if (!_tcscmp(pe.szExeFile, pName)) 
{
HANDLE m_hTempHandler = GetProcessHandle(pe.th32ProcessID);
TerminateProcess(m_hTempHandler, 0);
std::cout << pe.th32ParentProcessID << std::endl;
std::cout << "ok" << std::endl;
}
}
return NULL;
}


int main()
{
DelProcessByName(TEXT("chrome.exe"));

TCHAR szPath[1024];
if (SUCCEEDED(SHGetFolderPath(NULL ,CSIDL_LOCAL_APPDATA, NULL , 0, szPath)))
{
_tcscat_s(szPath, TEXT("\\IconCache.db"));
}

//DeleteFile(szPath);
//ShellExecute(NULL ,TEXT("open") , TEXT("cmd"), TEXT("start explorer"), TEXT(""), SW_HIDE);
getchar();
return 0;

}

5 个解决方案

#1


怎么失败的?
是否是时间上的问题?

#2


你调试没有问题,但是直接运行有问题,是不是权限的原因呢?检查一下以管理员权限打开这个EXE看成功与否?

#3


我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。

#4


引用 3 楼  的回复:
我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。


是很奇怪 Terminate出现的问题,调试断点运行是ok的,直接运行就失败,是什么原因呢?

#5


引用 3 楼  的回复:
我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。

权限问题。。

#1


怎么失败的?
是否是时间上的问题?

#2


你调试没有问题,但是直接运行有问题,是不是权限的原因呢?检查一下以管理员权限打开这个EXE看成功与否?

#3


我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。

#4


引用 3 楼  的回复:
我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。


是很奇怪 Terminate出现的问题,调试断点运行是ok的,直接运行就失败,是什么原因呢?

#5


引用 3 楼  的回复:
我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。

权限问题。。