Windows 7上的C ++ CreateProcess错误代码2(“ERROR_FILE_NOT_FOUND”)(64)

时间:2014-08-21 10:35:23

标签: c++ windows runtime-error createprocess

我正在尝试创建一个简单的程序来在Windows 7(64)上的C / C ++中测试CreateProcess()函数。当我直接传递CommandLine(“szCmdline”)参数时它工作正常,但是如果我尝试通过从argv获取参数并传递给函数来发送参数我在运行时得到“错误代码2(”ERROR_FILE_NOT_FOUND“)”

我一直在寻找解决方案,并在此论坛上发现“CreateProcess-fails-under-windows-7”,但它似乎对我不起作用或者我做错了。

这是NewProcess()代码:

void NewProcess(TCHAR **cmd){

    printf("Argv Inside funcion: %s\n",cmd[1]);
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        cmd[1],         // Command line
        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() );
        return;
    }

    printf("Process ID: %d Started",pi.dwProcessId);
    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    printf("\nProcess ID: %d Terminated!",pi.dwProcessId);

    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

主要功能代码:

void main(int argc, TCHAR *argv[])
{
    printf("Argv outside function: %s\n",argv[1]);
    //LPTSTR szCmdline = _tcsdup(TEXT("C:\\Windows\\system32\\calc.exe"));  <-- **It works fine**

    NewProcess(argv);  // <-- **It doesn't works**
}

在运行时,cmd和argv包含相同的数据,但在CreateProcess()调用时失败。

结果:

E:\C++\VISUAL_STUDIO\NewTest> newtest.exe "C:\Windows\System32\calc.exe"
Argv outside function: C:\Windows\System32\calc.exe
Argv Inside funcion: C:\Windows\System32\calc.exe
CreateProcess failed (2).

我测试了“C:\\ windows \\ system32 \\ calc.exe”,%windir%\ system32 \ calc.exe,“C:\ Windows \ SysNative \ calc.exe”

有什么想法吗?

谢谢你的建议

1 个答案:

答案 0 :(得分:3)

您确定void main(int argc, TCHAR *argv[])是否正确?在Windows中,我目前使用:

  • int main(int argc, char *argv[]) 8位ANSI字符
  • int wmain(int argc, wchar *argv[]) 16位UNICODE字符
  • int _tmain(int argc, TCHAR *argv[])宏定义

如果你发布了什么,如果你使用了什么,你可以将LPSTR *传递给你的函数,如果定义了UNICODE,你需要LPWSTR *