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..?)

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

Reply via email to