创建过程总是失败

问题描述 投票:1回答:1

我试图用 CreateProcess 在C++中。但是这个函数总是返回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;
    }

程序显示错误代码123. 我试着让 exename 作为第二个参数,然后错误代码变成了2。

我上网查了一天,也试过把项目的字符集改成Multibyte或Unicode,把它替换成 CreateProcessCreateProcessACreateProcessW替换为 char *LPCSTRLPCWSTR 和许多其他尝试。他们都没有解决这个问题,但显示相同的错误代码。

我在Windows 10中运行该代码,并用Visual Studio 2013编译。我确定我的电脑上存在 "c:\Windows\Notepad.exe"。

这已经把我逼疯了,请帮帮我。任何提示都将感激不尽。

这个问题的解决方法。

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

c++ windows winapi
1个回答
7
投票

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

从这里复制这一行来使其工作。

auto const exename = _T("c:\\Windows\\Notepad.exe");

你可以用HEX编辑器看到隐藏的字符。

enter image description here

你可以把问题中的这行复制到这里来测试。在线十六进制编辑器.

© www.soinside.com 2019 - 2024. All rights reserved.