用WINEXEC运行个命令行命令。这个批处理是一个7zip的压缩命令。 我想压缩后吧这个7zip.exe删掉。但是直接在winexec的下一行删。程序运行的时候说被占用。应该如何搞呢?

解决方案 »

  1.   

    等待WinExec执行完成,然后用DeleteFile删除7Zip.exe
      

  2.   

    WinExec调用命令时,发出命令后,不管有没有执行完成,就立即返回
    象你这种解压应该是要花费一定时间的。这样就造成解压还在继续,但你程序已经执行到下一步了,所以就会出现你说的情况。改用CreateProcess
      

  3.   


    var
      SI : TStartupInfo;
      PI : TProcessInformation;
    begin
      FillChar(SI , SizeOf(SI) , 0);
      SI.cb := SizeOf(SI);
      CreateProcess(NIL , 'notepad.exe' , NIL , NIL , False , 0 , NIL , NIL , SI , PI);
      WaitForSingleObject(PI.hProcess , INFINITE);//等待 notepad执行完成
      CloseHandle(PI.hThread);
      CloseHandle(PI.hProcess);
    end;
      

  4.   

    在批处理里头最后加上一行del "c:\7zip.exe"不就行了?
      

  5.   

    至s11ss:批处理是一条一条执行下去的,你执行del时7zip可能还在跑,会提示资源占用
      

  6.   

    给你个批处理,你看Hello是不是在winver结束后才显示。
    [code=BatchFile]@echo off
    winver
    echo Hello
    pause[/code]
    当然如果是用start命令启动7zip,那就要加/WAIT参数,不然就会如你所说“执行del时7zip可能还在跑”。