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 和 WaitForSingleObject 在两个 PDF 文件中的第二个失败
process_begin: CreateProcess(NULL,......) make (e=87): 参数错误。
如何使用 ProcMon 检查 Win32 CreateProcess() 失败的原因。排除 GetLastError()