关于释放内存的问题 我在程序中调用了Rar.exe以及批处理。但是在我关闭程序后内存中会有许多的Rar.exe 和cmd.exe 请问怎么处理啊?程序中用的是ShellExecute很WinExec. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL CFindKillProcess::FindProcess(CString ExeFile){ BOOL ResultValue; CString FileName; HANDLE Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); ProcessInfo.dwSize=sizeof(PROCESSENTRY32); ExeFile= ExeFile.Left(15); ExeFile.MakeLower(); ResultValue= false; if(Process32First(Handle,&ProcessInfo)) { if(GetLastError()!=ERROR_NO_MORE_FILES ) { FileName.Format("%s",ProcessInfo.szExeFile); FileName= FileName.Left(15); FileName.MakeLower(); if (strcmp(FileName,ExeFile)) { while(Process32Next(Handle,&ProcessInfo)!=FALSE) { FileName.Format("%s",ProcessInfo.szExeFile); FileName= FileName.Left(15); FileName.MakeLower(); if (strcmp(FileName,ExeFile)==0) { ResultValue= true; break; } } } else ResultValue= true; } } CloseHandle(Handle); return ResultValue;}BOOL CFindKillProcess::KillProcess(BOOL bZap){ // 我已经关闭了全部主窗口,现在等待进程死亡。 BOOL bKilled = TRUE;// HANDLE hp=OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,ProcessInfo.th32ProcessID); HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProcessInfo.th32ProcessID); int rc = GetLastError(); if (hp) { if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0) { if (bZap) { // 不愿死,那不行,你必须死 TerminateProcess(hp,0); } else { bKilled = FALSE; } } CloseHandle(hp); } return bKilled;}参考上面的函数,手动清除吧 //得到当前路径 TCHAR *path = new char[MAX_PATH+1]; GetModuleFileName(::GetModuleHandle(NULL),path,MAX_PATH); INIFilePath = path; // 当前的路径名+你的程序名 INIFilePath.TrimRight("\\Current Path.exe"); CString tmp; for(int i = 0 ; i <m_List1.GetCount();i++) { if (m_List1.GetSel(i)) { m_List1.GetText(i,tmp); } } int slen = tmp.Find("*"); sss1.Format("rar"); tn = zz.TrimRight(".rar"); sss2.Format(" x %s *.* %s\\",zz,tn); ::ShellExecute(NULL,NULL,sss1,sss2,INIFilePath,SW_HIDE); Sleep(250);这个是调用rar.exe 释放文件。 求助;VC及外围技术 关于智能指针的一个问题 关于OpenGL使用鼠标框选时,深度缓存和面消隐的问题 OnCtlColor 中的 pDC 问题 vc数据库编程中使用ADO访问数据库的详细过程 什么奇怪的问题都让我碰上了,帮帮忙看看???????????? 500分求较好的H263和MPEG4算法源码!!各位大哥请帮忙 谁会把小写金额变成大写金额 急:用ALT COM向导生成的COM组件注册问题 Vc++屏幕监控,可以查看对方屏幕以及鼠标监控、键盘监控功能源码 要求要像QQ远程控制那样的功能 access数据库的自动编号字段的宽度是多少? 问一个关于platform sdk的问题,请大家赐教!
{
BOOL ResultValue;
CString FileName;
HANDLE Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcessInfo.dwSize=sizeof(PROCESSENTRY32);
ExeFile= ExeFile.Left(15);
ExeFile.MakeLower();
ResultValue= false;
if(Process32First(Handle,&ProcessInfo))
{
if(GetLastError()!=ERROR_NO_MORE_FILES )
{
FileName.Format("%s",ProcessInfo.szExeFile);
FileName= FileName.Left(15);
FileName.MakeLower();
if (strcmp(FileName,ExeFile))
{
while(Process32Next(Handle,&ProcessInfo)!=FALSE)
{
FileName.Format("%s",ProcessInfo.szExeFile);
FileName= FileName.Left(15);
FileName.MakeLower();
if (strcmp(FileName,ExeFile)==0)
{
ResultValue= true;
break;
}
}
}
else ResultValue= true;
}
}
CloseHandle(Handle);
return ResultValue;
}BOOL CFindKillProcess::KillProcess(BOOL bZap)
{
// 我已经关闭了全部主窗口,现在等待进程死亡。
BOOL bKilled = TRUE;
// HANDLE hp=OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,ProcessInfo.th32ProcessID);
HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProcessInfo.th32ProcessID);
int rc = GetLastError();
if (hp) {
if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0) {
if (bZap) { // 不愿死,那不行,你必须死
TerminateProcess(hp,0);
} else {
bKilled = FALSE;
}
}
CloseHandle(hp);
}
return bKilled;
}参考上面的函数,手动清除吧
TCHAR *path = new char[MAX_PATH+1];
GetModuleFileName(::GetModuleHandle(NULL),path,MAX_PATH);
INIFilePath = path; // 当前的路径名+你的程序名
INIFilePath.TrimRight("\\Current Path.exe");
CString tmp;
for(int i = 0 ; i <m_List1.GetCount();i++)
{
if (m_List1.GetSel(i))
{
m_List1.GetText(i,tmp);
}
}
int slen = tmp.Find("*");
sss1.Format("rar");
tn = zz.TrimRight(".rar");
sss2.Format(" x %s *.* %s\\",zz,tn);
::ShellExecute(NULL,NULL,sss1,sss2,INIFilePath,SW_HIDE);
Sleep(250);
这个是调用rar.exe 释放文件。