2017-02-13 8 views
1

Я выполнил эту команду в окне CMD, и она работает. Теперь мне нужно запустить его в программном коде VC++ 2015 года, но я не могу его получить. Я читал различные сообщения, касающиеся этого, но они в основном предназначены для строковых литералов, и у меня есть переменные. Я думаю, это отбрасывает двойные кавычки. Мне не нужно использовать _wsystem, если есть лучший/безопасный способ.Выполнение CMD-строки в C++ Использование переменных (не строковых литералов) в качестве Params

ОБНОВЛЕНО:

std::wstringstream wss; 
wss << std::wstring(L"\"") << CPathUtil::get_exe_fullpath() << std::wstring(L"\"") << L" /q /a " << std::wstring(L"\"") + cp.c_str() + std::wstring(L"\""); 
const auto command = wss.str(); 
const auto result = _wsystem(command.c_str()); 

Он по-прежнему не работает с VC++ приложение .. command = "C:\Users\Valued Customer\Documents\Visual Studio 2015\Projects\svn_3dg_wc\x64\Debug\MyAppD.exe" /q /a "C:\Users\Valued Customer\Documents\Visual Studio 2015\Projects\svn_3dg_wc\Samples\New folder\C - Copy (2).abc" Если скопировать значение из отладчика и вставить в окно CMD, он работает.
Любые идеи?

ответ

0

Котировки, которые вы добавляете на последнем этапе перед вызовом _wsystem, превращают всю строку в одну команду . Кавычки необходимы для группировки «слов», разделенных пробелами в команде.

Содержимое param должно быть что-то вроде

"C:\Users\Valued Customer\Documents\Visual Studio 2015\Projects\svn_wc\x64\Debug\MyApp.exe" /q /a "C:\Users\Valued Customer\Documents\Visual Studio 2015\Projects\svn_3dg_wc\Samples\New folder\C - Copy (2).abc" 

Обратите внимание, что /q /a часть не в кавычках, только пути к файлам (который содержит пробелы и поэтому нуждается в кавычки).

Также обратите внимание, что в кавычках нет кратного числа кавычек, только одиночные двойные кавычки.