与shell脚本不同,批处理文件不可执行吗?

时间:2013-01-05 12:21:09

标签: c++ windows boost process win32-process

我正在使用boost.process来运行带有一些给定输入的外部进程。用户可以指定外部进程。因此大多数时候用户指定shell脚本或批处理脚本。

我只是在做boost::process::launch(_script, arguments, context);,它既可以使用真正的可执行文件,也可以使用shell脚本,只要它们可以按预期执行(+ x)​​。但是当我在Windows中运行它时。它不起作用如果我在_script中传递一个批处理文件,但如果我指定一个真正的可执行文件,它就可以工作。

这让我觉得在Windows批处理脚本根本不是可执行文件?它们只是通过cmd.exe解释!这是真的吗?

我可以启动cmd.exe并指定/c _script argv作为命令行参数。但这不会是跨平台的。

并且我不想进行system()调用,因为我无法完全控制已创建的进程?

1 个答案:

答案 0 :(得分:1)

没错,批处理文件不能直接执行,需要命令处理器来运行它们。

也就是说,解决可移植性问题应该相当简单,可以在编译时(通过预处理器宏)或运行时(特定于Windows的环境变量?脚本文件扩展名?)完成。

我可能会认为前者更强大。