Я работаю над приложением в Qt, где я должен использовать ShellExecuteEx для запуска приложения. Я запускаю командный файл, и мне нужно передать ему 2 аргумента. Первый аргумент — это просто буква, а второй — путь, который может содержать или не содержать пробелы. Неважно, что я делаю, это не ускользнет от пространства. Кажется, что включение любых экранированных цитат фактически нарушает весь вызов. Я думаю, что проблема с рунами. Я не уверен на 100%, как это работает, но похоже, что он копирует вызов и запускает его в расширенной оболочке. Кажется, что этот процесс ломается с добавленными цитатами.
Вот мой код ShellExecute. Я упростил это до передачи в 1 аргумент, но это все еще ломается.
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"runas";
ShExecInfo.lpFile = L"test.bat";
ShExecInfo.lpParameters = L"\"test param\"";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
Вот test.bat просто для полноты
@echo off
pause
Я получаю вывод оболочки.
'J:\Repositories\Qt' is not recognized as an internal or external command, operable program or batch file.
Путь к сценарию
J:\Repositories\Qt Project\debug\test.bat
Вы можете видеть, что первоначальная команда терпит неудачу, потому что она портит исходный путь.
Любая идея, как включить цитаты в аргументы с помощью команды runas, как это?
Попробуй дальше:
ShExecInfo.lpFile = NULL;
ShExecInfo.lpParameters = L"test.bat \"test param\"";