我正在使用boost.process
来运行带有一些给定输入的外部进程。用户可以指定外部进程。因此大多数时候用户指定shell脚本或批处理脚本。
我只是在做boost::process::launch(_script, arguments, context);
,它既可以使用真正的可执行文件,也可以使用shell脚本,只要它们可以按预期执行(+ x)。但是当我在Windows中运行它时。它不起作用如果我在_script
中传递一个批处理文件,但如果我指定一个真正的可执行文件,它就可以工作。
这让我觉得在Windows批处理脚本根本不是可执行文件?它们只是通过cmd.exe解释!这是真的吗?
我可以启动cmd.exe
并指定/c _script argv
作为命令行参数。但这不会是跨平台的。
并且我不想进行system()
调用,因为我无法完全控制已创建的进程?
答案 0 :(得分:1)
没错,批处理文件不能直接执行,需要命令处理器来运行它们。
也就是说,解决可移植性问题应该相当简单,可以在编译时(通过预处理器宏)或运行时(特定于Windows的环境变量?脚本文件扩展名?)完成。
我可能会认为前者更强大。