CreateProcess()函数。 GetLastError()返回3

时间:2013-01-06 19:02:27

标签: c++ winapi

我从以下程序中收到以下错误:CreateProcess failed(3)

int __cdecl main(int argc, char **argv)
{
    USES_CONVERSION;
    string name_of_bitmap;
    cout << "Name of file: ";
    cin >> name_of_bitmap;
    string arguments = "F:\\windowsqnx\\maps\\show_simulation\\Debug\\show_simulation.exe " + name_of_bitmap;
    const char * nob;
    nob = arguments.c_str();
    std::wstring stemp = s2ws("F:\\windowsqnx\\maps\\show_simulation\\Debug\\show_simulation.exe");
    LPCWSTR path = stemp.c_str();
    // runing simulation display process
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process. 
    if ( !CreateProcess(path,
        A2W( nob ) ,
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
        )
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        Sleep(2000);
        return 1;
    }
}

我是流程新手,无法弄清楚我做错了什么。我读了this并执行了以下string arguments = "\"F:\\windowsqnx\\maps\\show_simulation\\Debug\\show_simulation.exe\" " + name_of_bitmap;std::wstring stemp = s2ws("\"F:\\windowsqnx\\maps\\show_simulation\\Debug\\show_simulation.exe\" ");然后获取错误123,如果我将第一个参数CreateProcess(NULL,归零我得到了失败2.请帮助。

修改

std::wstring s2ws(const std::string& s)
{
   int len;
   int slength = (int)s.length() + 1;
   len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
   wchar_t* buf = new wchar_t[len];
   MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
   std::wstring r(buf);
   delete[] buf;
   return r;
}

3 个答案:

答案 0 :(得分:2)

错误2是

ERROR_FILE_NOT_FOUND
2 (0x2)
The system cannot find the file specified.

您指定的路径是针对不存在的文件,或者s2ws正在为您的字符串做一些时髦的事情。我们能看到s2ws吗?

答案 1 :(得分:1)

根据Windows error code documentation,错误2表示ERROR_FILE_NOT_FOUND,错误3表示ERROR_PATH_NOT_FOUND,两者都可能意味着exe不是您告诉Windows的地方。

答案 2 :(得分:1)

BAD:“... \ show_simulation.exe \”

GOOD:“... \ show_simulation.exe”

尝试从命令行输入“show_simulation.exe” - 你会明白我的意思:))

看起来s2ws()可能是附加不需要的尾部斜杠的罪魁祸首。