Ludo Brands:

> You can file a bug at http://bugs.freepascal.org/

OK.

> Dupicating handles isn't apparently the only solution. The
> msdn sample creates non-inheritable pipes and hands  these
> handles simply over to createprocess, without duplicating.

There  are  two solutions, but only of them allows detection
of EOF.

On MSDN there are two examples. In this one:

    http://msdn.microsoft.com/en-us/library/ms682499(v=vs.85).aspx

inheritable pipe handles are created using CreatePipe,  just
as  I was doing in my initial WinApi code and as TProcess is
doing. These pipes don't support the detection of EOF.

In this one:

    http://support.microsoft.com/kb/190351/en-us?fr=1

non-inheritable pipes are created by CreatePipe,  which  are
then duplicated into inheritable ones using DuplicateHandle.
The duplicates are passed to CreateProcess, while  the  non-
inheritable originals are used by the parent process, allow-
ing it to issue EOF by closing them.

This is what made my WinApi code work with more.com.

> You want to pass inheritable handles if you want the child
> to  have  full control of the pipe, which apparently isn't
> needed for RW.

A handle must be inheritable in order to be passed from  one
process to another. There are two ways to make it so:

  1.  Specify a flag in CreateProcess

  2.  Duplicate     a     non-inheritable    handle    using
      DuplicateHandle

The first MSDN example goes the former way  and  second  the
latter way.

Anton
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to