#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
是很奇怪
#5
权限问题。。
#1
怎么失败的?
是否是时间上的问题?
是否是时间上的问题?
#2
你调试没有问题,但是直接运行有问题,是不是权限的原因呢?检查一下以管理员权限打开这个EXE看成功与否?
#3
我找到原因了,是return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);,如果改成Process_TerminateProcess就ok了,但这是为什么呢?很奇怪。
#4
是很奇怪
#5
权限问题。。