2015-08-10 1 views
0

В CreateProcess documentation указано, что для запуска командного файла необходимо использовать cmd.exe /C <path to bat>. На самом деле он может запускать командные файлы просто отлично, если только путь к скрипту не содержит пробелов (Microsoft подтверждает это в описании MS14-019 vulnerability). Интересно, возможно ли избежать пробелов в пути к пакетному файлу, чтобы сделать работу CreateProcess. Добавление котировки не поможет, CreateProcess завершается с ошибкой:Используйте CreateProcess для запуска bat с пробелами

cannot spawn "<path to batch>": No such file or directory 

Update

Обойти это использовать короткие имена файлов указываемого @jac в комментариях. Мне все еще интересно, почему включение пути в двойные кавычки работает для обычных исполняемых файлов, но не работает для пакетных файлов.

+0

Используйте [ShellExecuteEx] (https://msdn.microsoft .com/en-us/library/windows/desktop/bb762154.aspx). – IInspectable

+0

К сожалению, у меня нет кода, который вызывает CreateProcess, поэтому переключиться на ShellExecuteEx или 'cmd.exe/C' не является вариантом. – neverov

+0

Согласно телу вашего вопроса, вы уже знаете ответ. –

ответ

0

Для CreateProcess отсутствует символ escape.

Поскольку код сломан, и вы не можете исправить его, вам придется решить эту проблему. Например, создайте точку соединения в целевом каталоге и запустите пакетный файл через путь точки соединения или используйте короткие пути, как предположил jac. (Обратите внимание, что не все тома обязательно будут иметь короткие пути, но если вы имеете дело с системным томом, вероятно, можно предположить, что они будут.)

Смежные вопросы