командные файлы НЕ исполняются в отличие от сценариев оболочки?

я использую boost.process запустить внешний процесс с некоторыми данными. Пользователь может указать этот внешний процесс. Поэтому в большинстве случаев пользователь указывает сценарий оболочки или пакетный сценарий.

Я просто делаю boost::process::launch(_script, arguments, context); которая работает как с реальными исполняемыми файлами, так и со скриптами оболочки, если они исполняемые (+ x), как и ожидалось. но когда я запускаю его в windows. это не работает, если я передаю командный файл в _script однако это работает, если я укажу настоящий исполняемый файл.

Это заставляет меня думать, что в Windows пакетные сценарии НЕ являются исполняемыми файлами вообще? Они просто интерпретируются через cmd.exe! Это правда ?

Я могу запустить cmd.exe и указать /c _script argv в качестве параметров командной строки. но это не будет кросс-платформенным.

и я не хочу делать system() звонки, потому что я не буду иметь полный контроль над созданными процессами?

3

Решение

Это верно, командные файлы не могут быть непосредственно выполнены и требуют командного процессора для их запуска.

Тем не менее, решение проблемы переносимости должно быть довольно простым и может быть сделано либо во время компиляции (с помощью макросов препроцессора), либо во время выполнения (переменные среды, специфичные для Windows? Расширение имени скрипта?)

Я бы, вероятно, пошел с первым как более надежным.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]