я использую boost.process
запустить внешний процесс с некоторыми данными. Пользователь может указать этот внешний процесс. Поэтому в большинстве случаев пользователь указывает сценарий оболочки или пакетный сценарий.
Я просто делаю boost::process::launch(_script, arguments, context);
которая работает как с реальными исполняемыми файлами, так и со скриптами оболочки, если они исполняемые (+ x), как и ожидалось. но когда я запускаю его в windows. это не работает, если я передаю командный файл в _script
однако это работает, если я укажу настоящий исполняемый файл.
Это заставляет меня думать, что в Windows пакетные сценарии НЕ являются исполняемыми файлами вообще? Они просто интерпретируются через cmd.exe! Это правда ?
Я могу запустить cmd.exe
и указать /c _script argv
в качестве параметров командной строки. но это не будет кросс-платформенным.
и я не хочу делать system()
звонки, потому что я не буду иметь полный контроль над созданными процессами?
Это верно, командные файлы не могут быть непосредственно выполнены и требуют командного процессора для их запуска.
Тем не менее, решение проблемы переносимости должно быть довольно простым и может быть сделано либо во время компиляции (с помощью макросов препроцессора), либо во время выполнения (переменные среды, специфичные для Windows? Расширение имени скрипта?)
Я бы, вероятно, пошел с первым как более надежным.
Других решений пока нет …