在应用程序路径中将CreateProcessW与非ASCII字符一起使用

时间:2019-06-21 16:56:16

标签: c++ windows winapi visual-c++

我试图调用CreateProcessW并执行位于helloworld.exe下的C:\Users\name_with_é\helloworld.exe文件(helloworld.exe在控制台上显示“ Hello world”)。我在Windows 10(64位)上使用MSVC:

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();
}

使用此代码,即使存在helloworld.exe,CreateProcessW也返回false,而GetLastError()返回2(ERROR_FILE_NOT_FOUND)。

但是,wcout << buf.data()给出了C:\Users\name_with_├®\helloworld.exe。所以我有一个编码问题(并且我相信它会引起ERROR_FILE_NOT_FOUND错误),但是如何解决呢?

我将Visual Studio设置为使用Unicode字符集,但据我看,在Windows上使用utf-8并非易事...

0 个答案:

没有答案