MFC中删除可执行文件(运行或不运行的)

这段代码展示了如何在MFC应用程序中删除名为1.exe的可执行文件,包括在运行状态下终止进程并删除文件。首先获取当前目录,然后通过SetCurrentDirectory切换到目标文件夹,使用CFileFind查找文件。如果找到文件,获取其进程ID,终止进程,最后删除文件。若文件不存在或进程无法结束,会弹出错误消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bool CMyProductOptionWnd::DeleteExe()
{
char pFileName[MAX_PATH];   
  int nPos = GetCurrentDirectory( MAX_PATH, pFileName);   
    CString strSaveDir;(pFileName);    
  if( nPos < 0 ){   
  AfxMessageBox(L"获取当前路径失败,请重试。");
ExitProcess(0);
 
CString strDelExe=strSaveDir+L"\\1.exe";
CString strmDelExe=L"1.exe";
if(TRUE==SetCurrentDirectory(strSaveDir))
{
CFileFind finder;
BOOL bol=finder.FindFile(strDelExe);
if(TRUE==bol)
{
DWORD procID=this->GetProcessIdFromName(strmDelExe,strSaveDir);//获取进程ID
if(procID>0)
{
HANDLE handle=OpenProcess(PROCESS_TERMINATE,FALSE,procID);
BOOL ret=TerminateProcess(handle,4);//这里必须是4 否则无法结束进程
if(0==ret)
{
AfxMessageBox(L"未结束指定的进程");
return 0;
}
}
DeleteFileW(strDelExe);
}else
{
AfxMessageBox(L"获取相关可执行文件失败,请检查文件是否存在¨);


return 0;
}
}else
{
AfxMessageBox(L"获取相关可执行文件失败,请检查文件夹是否存在");
}
return false;
}




// 根据名称获取进程ID
DWORD CMyProductOptionWnd::GetProcessIdFromName(CString processName, CString processPath)
{
PROCESSENTRY32 pe;
MODULEENTRY32 me;
DWORD id=0;
HANDLE mehandle;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
BOOL ret=Process32First( hSnapshot,&pe);
if(!ret)
return 0;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(processName.CompareNoCase(pe.szExeFile)==0)
{
id=pe.th32ProcessID;
//获取当前进程所在路径
mehandle=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);
me.dwSize=sizeof(MODULEENTRY32);
Module32First(mehandle,&me);
processPath=me.szExePath;
break;
}
}
CloseHandle(hSnapshot);
return id;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值