I was baffled for hours trying to fix a bug where running a program with ChildProcess did not succeed. I think I finally traced the problem to :
if (CreatePipe (&readPipe, &writePipe, &securityAtts, 0)
in juce_win32_Threads.cpp. Changing that line to :
if (CreatePipe (&readPipe, &writePipe, &securityAtts, 65536)
allows the certain problematic program to run until its end. So, it looks like the 0 for a "system preferred" buffer size will not in all cases succeed. Obviously putting in such a magic number (65536) raises questions whether even that is enough for all cases or what if it needlessly wastes system resources when a buffer that large isn't required etc...
edit : I didn't yet check if doing readProcessOutput() several times during the program run would help when the pipe buffer size is at creation is 0, but even if it did, that would be slightly inconvenient as I am not interested in the output when the program does a succesful run. (And it is in that case it does the very verbose output.) Only if there's an error, I do a readAllProcessOutput() call.