CreateProcess
имеет 3 строковых аргумента: lpApplicationName
, lpCommandLine
, lpCurrentDirectory
.WinAPI CreateProcess и цитирование аргументов
Я попытался процитировать этот аргумент и обнаружил, что иногда котировки прерывают мой код. Может кто-нибудь объяснить правила цитирования?
работает отлично:
NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
Не работает:
NULL
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"\"C:\\some path\""
работает отлично:
"C:\\some path\\my app.exe"
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
Не работает:
"\"C:\\some path\\my app.exe\""
"\"C:\\some path\\my app.exe\" myparam1 myparam2"
"C:\\some path"
P.S. Извините, форматирование StackOverflow не показало мои обратные косые черты в приведенных выше примерах, и я пропустил его ... Теперь исправлено
Помните, что * все * обратные косые черты в строке C должны быть экранированы; все ваши строки C должны использовать две обратные косые черты как разделитель путей. Правила цитирования аргументов описаны в документации для функции 'CommandLineToArgvW()' и в разных местах в блоге The Old New Thing. – andlabs
Путь приложения и текущий каталог не должны указываться. Цитата предназначена для командной строки, а не для путей и каталогов. –
@RaymondChen Но если вы посмотрите на документы для CreateProcess, вы увидите, что lpApplicationName должно быть указано. Сломанные документы? –