如何运行一个DOS应用程序(命令行的形式),并且返回成功或者失败?
顺便提一个问题,如何判断机器上是否注册了某个COM(+)组件,并切在没有注册的情况注册这个组件。

解决方案 »

  1.   

    取得dos命令的结果,比如ping,可以写成这样:ping www.sina.com.cn ->c:\a.txt,命令执行的结果就在a.txt中
      

  2.   

    if winexec('ping www.sina.com.cn', sw_hide) > 31 then
      //成功
    else
      //失败
      

  3.   

    WinExce('rundll32.exe shell32.dll,Control_RunDLL xx.cpl,yy',SW_NORMAL);
      

  4.   

    取得dos命令的结果,比如ping,可以写成这样:ping www.sina.com.cn ->c:\a.txt,命令执行的结果就在a.txt中
      

  5.   

    请问在程序中执行命令行程序,在执行上是顺序的吗?
    比如
    i:=i+10;
    执行命令行程序;
    showMessage('OK');
    当Showmessage的时候一定是命令行程序执行完毕了吗?
      

  6.   

    见过别人的方法,试试吧
    var  
               hReadPipe,hWritePipe:THandle;  
               si:STARTUPINFO;  
               lsa:SECURITY_ATTRIBUTES;  
               pi:PROCESS_INFORMATION;  
               mDosScreen:String;  
               cchReadBuffer:DWORD;  
               ph:PChar;  
               fname:PChar;  
               i,j:integer;  
    begin  
      fname:=allocmem(255);  
      ph:=AllocMem(5000);  
      lsa.nLength := sizeof(SECURITY_ATTRIBUTES);  
      lsa.lpSecurityDescriptor := nil;  
      lsa.bInheritHandle := True;  
      if  CreatePipe(hReadPipe,hWritePipe,@lsa,0)=false  then  
      begin  
        ShowMessage('Can  not  create  pipe!');  
        exit;  
      end;  
      fillchar(si,sizeof(STARTUPINFO),0);  
      si.cb  :=sizeof(STARTUPINFO);  
      si.dwFlags  :=(STARTF_USESTDHANDLES  or  STARTF_USESHOWWINDOW);  
      si.wShowWindow  := SW_HIDE;  
      si.hStdOutput  := hWritePipe;  
      StrPCopy(fname,EditFilename.text);  
                                           //edit  中输入你的命令,  如CMD.EXE  /c  dir/w  
     
      if CreateProcess(nil,fname,nil,nil,true,0,nil,nil,si,pi) = False then  
      begin  
        ShowMessage('can  not  create  process');  
        FreeMem(ph);  
        FreeMem(fname);  
        Exit;  
      end; 
      while(true)  do  
      begin  
        if  not  PeekNamedPipe(hReadPipe,ph,1,@cchReadBuffer,nil,nil)  then        break;  
        if  cchReadBuffer<>0  then  
        begin  
          if  ReadFile(hReadPipe,ph^,4096,cchReadBuffer,nil)=false  then         break;  
          ph[cchReadbuffer]:=chr(0);  
          Memo1.Lines.Add(ph);  
        end  
        else if (WaitForSingleObject(pi.hProcess,0) = WAIT_OBJECT_0)  then  break;  
        Sleep(100);  
      end;  
      ph[cchReadBuffer]:=chr(0);  
      Memo1.Lines.Add(ph);    //memo接收返回  
      CloseHandle(hReadPipe);  
      CloseHandle(pi.hThread);  
      CloseHandle(pi.hProcess);  
      CloseHandle(hWritePipe);  
      FreeMem(ph);  
      FreeMem(fname);  
    end;
      

  7.   

    显示是步步前进啊,不可能跳过去.ShellExecute(Handle, 'open', 'ping 10.1.61.1 >result.txt', nil, nil, SW_SHOWNORMAL);