Использование CreateProcessW с не-ascii символами в пути приложения - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь вызвать CreateProcessW и выполнить файл helloworld.exe, расположенный под C:\Users\name_with_é\helloworld.exe (helloworld.exe выводит «Hello world» на консоль). Я использую MSVC на Windows 10, 64 бит:

wstring cmd = L"C:\\Users\\name_with_é\\helloworld.exe";
vector<wchar_t> buf(cmd.begin(), cmd.end());
buf.push_back(0);
BOOL result = CreateProcess(NULL, buf.data(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
if (!result)
{
    wcout << "could not create process " << buf.data();
    cout << GetLastError();
}

С этим кодом CreateProcessW возвращает false, а GetLastError () возвращает 2 (ERROR_FILE_NOT_FOUND), даже если присутствует helloworld.exe.

Однако, wcout << buf.data() дает C:\Users\name_with_├®\helloworld.exe. Итак, у меня есть проблема с кодировкой (и я считаю, что она вызывает ошибку ERROR_FILE_NOT_FOUND), но как ее решить?

Я настроил Visual Studio на использование кодировки Unicode, но, насколько я видел, использование utf-8 в Windows не является тривиальным ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...