在制作软件的安装卸载时,有时一些动态库被某些进程占用,不可以直接删除,需要先将占用这个动态库的进程结束。怎么才能知道动态库被哪个进程占用呢?
开始的思路是这样的,在DOS里面有这样一个命令“tasklist /m XXX.dll”这个命令会列出所有占用了XXX.dll的进程。OK,原理简单。只要能得到DOS命令的返回结果就OK了。
代码如下:
/************************************************************************/
/* 得到cmd命令的返回结果 */
/************************************************************************/
BOOL GetCmdResult(IN char * pcCmdLine,//传入的cmd命令
OUT char * pcOutPut,//cmd返回结果
IN OUT DWORD * dwOutPutLen)//cmd返回结果的空间大小
{
SECURITY_ATTRIBUTES sSecAttr;
HANDLE hRead;
HANDLE hWrite;
sSecAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
sSecAttr.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sSecAttr.bInheritHandle = TRUE; //创建的进程继