У меня есть приложение, в котором пользователь загружает файл на удаленный сервер, тот же сервер для получения этого файла должен запускать это приложение. Я использую метод CreateProcess. Проблема в том, что каталог файлов уже определен в std :: string, и мне трудно передать этот каталог в качестве параметра CreateProcess.CreateProcess execute EXE
Как я могу передать этот каталог в CreateProcess без ошибок?
//the client remotely sends the directory where the file will be saved
socket_setup.SEND_BUFFER("\nRemote directory for upload: ");
char *dirUP_REMOTE = socket_setup.READ_BUFFER();
std::string DIRETORIO_UP = dirUP_REMOTE; // variable where it stores the remote directory
//after uploading this is validation for executing file
if (!strcmp(STRCMP_EXECUTE, EXECUTE_TIME_YES))
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
std::wstring wdirectory;
int slength = (int)directory.length() + 1;
int len = MultiByteToWideChar(CP_ACP, 0, directory.c_str(), slength, 0, 0);
wdirectory.resize(len);
MultiByteToWideChar(CP_ACP, 0, directory.c_str(), slength, &wdirectory[0], len);
if (!CreateProcess(NULL, wdirectory.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi));
}
Вы не передавая ни один путь + имя файла в 'CreateProcess()', вы устанавливаете как 'lpApplicationName', так и' lpCommandLine' значение NULL. Один из них должен указать exe-файл, который вы хотите выполнить. Так в чем же проблема? Что вы не знаете, как объединить струны вместе? Вы знаете, как передать 'std :: string' в' CreateProcess() '(через метод' c_str() '). Просто убедитесь, что вы вызываете 'CreateProcessA()', а не 'CreateProcessW()', если вы компилируете свое приложение с включенным UNICODE. –
Вы разрешаете пользователям загружать исполняемый файл на ваш сервер, а затем вы его выполняете? Хлоп !!!! –
'wstring.c_str()' возвращает константную строку, которая не подходит для передачи в качестве командной строки, вы должны выделить буфер, который вы можете изменить и передать, вместо этого. Из документации: 'Unicode-версия этой функции CreateProcessW может изменять содержимое этой строки.' –