首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcess总是失败

CreateProcess总是失败
EN

Stack Overflow用户
提问于 2020-04-24 11:20:02
回答 1查看 296关注 0票数 1

我试图用CreateProcess在C++中创建一个进程。但是这个函数总是返回false。

下面是我的一些代码:

代码语言:javascript
复制
#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;
    }

程序显示错误代码123。我尝试将exename作为第二个参数,然后错误代码更改为2。

我在谷歌上搜索了一天,并尝试将项目的字符集更改为多字节或Unicode,将CreateProcess替换为CreateProcessACreateProcessW,将char *替换为LPCSTRLPCWSTR,以及许多其他尝试。他们都没有解决问题,但显示相同的错误代码。

我正在Windows 10中运行该代码,并使用Visual 2013对其进行编译。我确信"c:\Windows\Notepad.exe“存在于我的电脑上。

它把我逼疯了,请帮帮我。如有任何提示,将不胜感激。

这个问题的解决方案:

不要从Windows资源管理器的属性对话框复制和粘贴文件路径,它可能包含一些隐藏字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 11:44:14

我不知道你是不是想骗我们,但是在c:\\前面有一个看不见的角色(就在"之后)。

从这里复制/粘贴这一行以使其工作:

代码语言:javascript
复制
auto const exename = _T("c:\\Windows\\Notepad.exe");

您可以使用HEX编辑器看到隐藏字符:

您可以通过将问题中的行复制/粘贴到这个在线十六进制编辑器来测试这个问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61407161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档