[fpc-pascal] TProcess vs RunProcess()

Santi svaa at ciberpiula.net
Sun Jan 29 21:36:40 CET 2017


El 27/01/17 a las 18:24, Graeme Geldenhuys escribió:
> If you have a huge list of parameters, RunProcess() - at least under
> Windows - will most likely hit a 260 character limit, and then fail to
> actually execute. I don't actually know where that 260 limit originates
> from (Windows API, Command Prompt, FPC etc).
it is easy to use more that 260 if you pass file names with long paths, 
and people nowadays love to name directories and files with strings that 
instead of titles look like abstracts.

In delphi and other languages I've hit may times the 260 character limit 
in windows running  a Shell or using ShellApi (I supposed the limit was 
255, not 260, there are always new things to learn) , I have also hit 
that limit using the command line. Nevertheless using windows API 
createprocess, there is not such limit (but the call is less handy and 
more verbose), or maybe I haven't hit it because parameters and call 
function are separated strings , so they are shorter strings. On the 
other hand, CreateProcess must call an executable file, can't execute 
internal commands like 'dir' or 'del', not a big deal but there it is. I 
think that the limit is in the command line interpreters command.exe and 
cmd.exe.

As far as I see, ExecuteProcess finally calls to an external symbol 
named 'FPC_SYSCALLx'. And TProcess finally calls an external symbol 
'FPC_SYSC_FORK'. Maybe ExecuteProcess is calling some kind of shell, 
Freepascal developers will tell.

In my delphi days we implemented a procedure ("RunCommand" was it's 
name, If memory serves), that was a warp to a complex call to 
createprocess to avoid these problems. Maybe executeProcess could be 
implemented this way. Don't know what are the drawbacks (slower, more 
memory..?)




More information about the fpc-pascal mailing list