> -----Message d'origine-----
> De : fpc-pascal-boun...@lists.freepascal.org [mailto:fpc-pascal-
> boun...@lists.freepascal.org] De la part de Michael Van Canneyt
> Envoyé : mercredi 25 mars 2015 09:54
> À : FPC-Pascal users discussions
> Objet : Re: [fpc-pascal] TProcess does not work in Windows XP
> 
> 
> 
> On Wed, 25 Mar 2015, Antonio Sanguigni wrote:
> 
> > 2015-03-25 8:41 GMT+01:00 Michael Van Canneyt
> <mich...@freepascal.org>:
> >>> ---------------------- code ---------------
> >>> procedure TBurpClient.Run;
> >>> begin
> >>>  fOurProcess.Options := [poUsePipes] + [poNoConsole];
> >>>  fOurProcess.Execute;
> >>>  while True do
> >>>  begin
> >>>    // make sure we have room
> >>>    fMemStream.SetSize(fBytesRead + READ_BYTES);
> >>>
> >>>    // try reading it
> >>>    fNumBytes := fOurProcess.Output.Read((fMemStream.Memory +
> >>> fBytesRead)^, READ_BYTES);
> >>>    if fNumBytes > 0 then // All read() calls will block, except the
> final
> >>> one.
> >>
> >>
> >> I am not sure this is always correct. Various versions of windows
> work
> >> differently in this regard;
> >> zero (0) may be a valid return value. I suggest you check
> >> fOurProcess.IsRunning to break the loop.
> >
> > Thank you, I will try it. But debugging I can see the problem is not
> > in the loop. In Windows XP fNumBytes is always zero:
> >
> > fNumBytes := fOurProcess.Output.Read((fMemStream.Memory +
> > fBytesRead)^, READ_BYTES);
> >
> > so it seems the Read of fOurProcess.Output is not giving the expected
> results.
> 
> Read translates directly to a kernel call.
> 
> >
> > In Windows 7 it's ok.
> 
> Once more:
> Zero is a valid return value for read from a pipe.
> 
> So it can perfectly be that read attempts 50 times returns 0, and only
> at
> read attempt 51 you get a positive result.
> 
> That is why you must check isRunning, and not rely on the return value
> of readbytes.

  It could also be due to the problem we detected in fpmkunit:
If the stderr is a separate pipe and that pipe is full,
the inferior will stop until that pipe is read.
See this patch:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/fcl-process/src/
process.pp?r1=29107&r2=29303

  Could the difference between Windows 7 and Windows XP
be related to different amount to stderr pipe?
  Or maybe the internal pipe size is different?

In the hope this could be useful,

Pierre Muller
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to