char cmdline[200]; 
CString tmp,stredit2;
stredit2 = "adb devices >.//Mylog12.txt";
tmp.Format("cmd /c %s",stredit2);
sprintf(cmdline,"%s",tmp); if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))   //创建子进程
{
 AfxMessageBox("CreateProcess Failed!");  
return ;
}
if(fclose(fp) == 0)
   MessageBox("关闭成功!");
if(DeleteFile(".//Mylog12.txt") != 0)
   MessageBox("删除成功!");

删除说被另一个进程占用,这个怎么搞啊.谢了!

解决方案 »

  1.   

    是不是 Handle  handleProcess = createProcess(.....);
    然后CloseHandle(handleProcess)
      

  2.   

    你那PI结构体中包含了这个进程的ID,及线程的ID 直接关闭就可以了
      

  3.   

    PROCESS_INFORMATION  stProcessInfo;
    while(!CreateProcess(strExePath, CmdLine, NULL, NULL, NULL,
    CREATE_NEW_CONSOLE, NULL, NULL,NULL,
    &stProcessInfo))
    {
    return false;
    }
    CloseHandle(stProcessInfo.hThread);
    CloseHandle(stProcessInfo.hProcess);
    丢个例子在这里放着吧!
      

  4.   

    你做的太快的,稍微等待一会,那个程序还没有执行完成呢。
    尤其是单CPU的系统,那个进程要等几十上百ms才可能开始执行,这段时间C程序早执行很多行了。WaitForSingleObject(pi.hProcess, INFINITE);    //等待进程结束CloseHandle(pi.hThread);  //一定要先关闭句柄
    CloseHandle(pi.hProcess);//再删除文件……
      

  5.   

    不行的话,结束进程TerminateThread
      

  6.   

    好,谢谢!我经过进一步调试发现问题出在另外一个地方,具体是这样:
    我是先建一个dailog工程,在这个dailog里用一个button再打开一个dailog,上面这些事都是在第二个dailog里发生的,我发现如果不fopen则可以删除,fopen后必须把第一个dailog了才能删除,现在是想不关第一个dailog只关第二了dailog就同时把这个文件删除,目前是删不掉,藐视被第一个dailog进程占用.
    这个怎么解决,谢谢!
      

  7.   

    你在第一个Dialog中打开文件之后结束了工作之后有没有关闭相关的文件句柄呢?如果没有关闭肯定不行。
      

  8.   

    不是在第一个dailog打开的,fopen是在第二个dailog用的,而且用完都fclose了