CreateProcess 在 C 中失败

Posted

技术标签:

【中文标题】CreateProcess 在 C 中失败【英文标题】:CreateProcess failed in C 【发布时间】:2013-11-16 17:53:57 【问题描述】:

我正在尝试使用以下代码创建一个进程:

void GenerateCommandLine( char *commandLine, 
                          int maxLength, 
                          const char *imageTitle) 
    const char * COMMAND_LINE_TEMPLATE = "AnalyzeImage.exe --image_file %s";
    sprintf_s(  commandLine, 
                maxLength, 
                COMMAND_LINE_TEMPLATE, 
                imageTitle 
    );


int AnalyzeCurrentImage(char* imageTitle) 
    STARTUPINFO         startupInfo;
    PROCESS_INFORMATION processInfo;
    DWORD               exitCode = MAXINT;
    char                commandLine[ MAX_ELEMENT_LENGTH ];

    commandLine[ 0 ] = '\0';
    InitVariables( &startupInfo, &processInfo );
    GenerateCommandLine( commandLine, MAX_ELEMENT_LENGTH, imageTitle );
    printf( "-----------command line is: %s\n", commandLine );


    // Start the AnalyzeImage process. 
    if( !CreateProcess( NULL,       // No module name (use command line)
        commandLine,                // 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 
        &startupInfo,   // Pointer to STARTUPINFO structure
        &processInfo )  // Pointer to PROCESS_INFORMATION structure
    ) 
    
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    
    printf("here!!!");
    // Wait until AnalyzeImage process exits.
    WaitForSingleObject( processInfo.hProcess, INFINITE );

    GetExitCodeProcess( processInfo.hProcess, &exitCode );
    printf( "------------ Exit Code: %d\n", exitCode );

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

当我从命令行运行这个程序时,我得到以下信息:

"-------命令行为:AnalyzwImage.exe --imgage_file img000.jpg CreateProess 失败 "

您是否知道创建过程失败的原因?

谢谢

【问题讨论】:

【参考方案1】:

错误代码 2 是 File Not Found,因此 CreateProcess 无法找到 AnalzwImage.exe。它要么不在当前目录中,要么不在系统路径中。尝试使用 AnalzwImage.exe 的完整路径。

【讨论】:

【参考方案2】:

GetLastError() 返回的代码 2 表示 ERROR_FILE_NOT_FOUND

简单地说,AnalyzwImage.exe 找不到。 您应该在命令行中包含可执行文件的绝对路径,或者确保调用 CreateProcess 时的当前工作目录是 AnalyzwImage.exe 所在的目录。

【讨论】:

以上是关于CreateProcess 在 C 中失败的主要内容,如果未能解决你的问题,请参考以下文章

CreateProcess() API 函数有啥用?

CreateProcess 和 WaitForSingleObject 在两个 PDF 文件中的第二个失败

process_begin: CreateProcess(NULL,......) make (e=87): 参数错误。

如何使用 ProcMon 检查 Win32 CreateProcess() 失败的原因。排除 GetLastError()

Android Studio Gradle 同步失败 CreateProcess 错误=2

CreateProcess api 在 Windows 10 上失败,错误代码为 122