◆▲有谁能帮我解决这个问题?,如果帮我解决,至少100分送上▲◆

                            
下面的代码是我从网上下载的,其实时实现把在dos运行的显示的信息显示在memo1中:      
   
   
  procedure   TForm1.BitBtn1Click(Sender:   TObject);  
  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,'ping.exe   192.168.0.1   -t');  
   
      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);  
      CloseHandle(hReadPipe);  
      CloseHandle(pi.hThread);  
      CloseHandle(pi.hProcess);  
      CloseHandle(hWritePipe);  
      FreeMem(ph);  
      FreeMem(fname);  
  end;  
   
   
  以上这段代码可以实现要求,但是如果我把  
  StrPCopy(fname,'ping.exe   192.168.0.1   -t');  
  用  
  StrPCopy(fname,'exp.exe   system/manager@orc1   file=d:\backup.dmp');  
  //备份oracle代替  
   
  则并没有在memo1中显示dos运行下的信息,但是oracle可以备份成功  
   
  我该怎么修改?

查看回复