这段时间做了个有关Excel报表导入数据库的小项目,发现在完成Excel操作后,函数结束却残留有EXCEL.EXE进程,让人感觉很不爽,也让函数不能够重复执行(因为之前的进程没有结束),在网上找了一堆方法,各种调用Application、workbook、worksheet的关闭方法仍然无法实现。无奈,最后只能使用代码在函数结束前将EXCEL.EXE进程杀掉,才得以解决问题。
下面贴出结束进程部分的代码。
#include "tlhelp32.h" //头文件
DWORD GetProcessIDByName(char *FileName) //自定义函数,通过进程名获得PID
{
HANDLE myhProcess;
PROCESSENTRY32 mype;
mype.dwSize = sizeof(PROCESSENTRY32);
BOOL mybRet;
//进行进程快照
myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程
//开始进程查找
mybRet=Process32First(myhProcess,&mype);
//循环比较,得出ProcessID
while(mybRet)
{
if(strcmp(FileName,mype.szExeFile)==0)
return mype.th32ProcessID;
else
mybRet=Process32Next(myhProcess,&mype);
}
return 0;
}
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,GetProcessIDByName("EXCEL.EXE")); //通过pid获得进程句柄,
BOOL result = TerminateProcess(hProcess,1); //调用该函数终结进程,第二个参数为进程退出码