用WIN API可以吗?
好象ShellExecute不知道可以吗?

解决方案 »

  1.   

    不行,好象得用CreateProcess之类的API,我也没怎么研究
      

  2.   

    试一下这个functionfunction WinExecAndWait32(FileName:string;visibility:Integer):integer;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      workDir:string;
      startUpInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
      i:DWord;
    begin
     
      StrPCopy(zAppName,FileName);
      FillChar(StartupInfo,sizeof(StartUpInfo),#0);
      StartupInfo.cb:=sizeOf(StartUpInfo);  StartUpInfo.dwFlags:=STARTF_USESHOWWINDOW;
      StartUpInfo.wShowWindow:=Visibility;  if not CreateProcess(nil,zAppName,nil,nil,false,
        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
        nil,nil,StartupInfo,ProcessInfo ) then
        Result:=-1
      else begin
        WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess,i);
        Result:=i;
      end;
    end;这个函数能先运行fileName文件并等待,只是无法判别你按了取消
      

  3.   

    用Delphi自己的函数就可以了
    后台开个循环,监视第一个程序的执行情况,如果取消就不执行第二个
      

  4.   

    在退出时的事件里用SHELLE不行?
      

  5.   

    建批处理,第一个正常退出时在批处理中加运行的程序,第二个运行时删除WinExec( PChar(RunFileName) ,SW_RESTORE );
    close;