我试图调用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并非易事...