All*_*ria 0 c++ windows winapi
我试图用CreateProcessC++创建一个进程。但是这个函数总是返回false。
这是我的一些代码:
#if UNICODE
std::wstring exename =
#else
char* exename =
#endif
_T("?c:\\Windows\\Notepad.exe");
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi;
if (!CreateProcess(exename, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
cout << "Error code=" << GetLastError() << endl;
}
Run Code Online (Sandbox Code Playgroud)
程序显示错误代码123。我尝试将makeexename作为第二个参数,然后错误代码更改为2。
我用谷歌搜索了一天,并尝试将项目的字符集更改为多字节或 Unicode,替换CreateProcess为CreateProcessAor CreateProcessW,替换char *为LPCSTRorLPCWSTR以及许多其他尝试。他们都没有解决问题,但显示相同的错误代码。
我在 Windows 10 中运行该代码并使用 Visual Studio 2013 编译它。我确定我的计算机上存在“c:\Windows\Notepad.exe”。
它让我发疯了,请帮助我。任何提示将不胜感激。
此问题的解决方法:
不要从 Windows 资源管理器的属性对话框中复制和粘贴文件路径,它可能包含一些隐藏字符。
我不确定您是否想欺骗我们,但是在 之前c:\\(就在 之后")有一个隐形字符。
从这里复制/粘贴这一行以使其工作:
auto const exename = _T("c:\\Windows\\Notepad.exe");
Run Code Online (Sandbox Code Playgroud)
您可以使用十六进制编辑器查看隐藏字符:
您可以通过将问题中的行复制/粘贴到此在线十六进制编辑器来进行测试。