3

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

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

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

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

而且我不想system()打电话,因为我无法完全控制创建的进程?

4

1 回答 1

1

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

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

我可能会选择前者更健壮。

于 2013-01-05T12:26:01.070 回答