Я пытаюсь вызвать 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 не является тривиальным ...