标题:VC程序设计中CreateProcess用法注意事项
什么是CreateProcess
CreateProcess
是一个Windows API函数,用来创建一个新的进程。它可以由一个程序来调用,来生成新的进程并运行。
CreateProcess的使用注意事项
在使用CreateProcess
函数创建新进程的时候,需要注意以下几点:
参数lpCommandLine中注意引号的使用
lpCommandLine
参数指定了将要执行的命令行字符串。尽管它看起来像是一个字符串数组,但实际上只是一个普通的字符串,里面包含了执行的程序名和命令参数。在传递参数的时候,如果你传递一个字符串数组,那么它会被解析为一个带空格的字符串。
如果你传递的字符串中有参数前后都需要加上双引号,那么你应该将字符串包含在一个双引号中,以防止双引号被解释为字符串的结束标志。
参数lpProcessInformation中需要赋初值
lpProcessInformation
参数指向一个PROCESS_INFORMATION
结构体,它用来保存新进程的标识符、句柄等信息。在使用CreateProcess
函数之前,你应该先将这个结构体赋初值,否则可能会发生未定义的行为。使用memset
函数或ZeroMemory
函数来赋初值。
子进程需要等待
如果你想让父进程等待子进程结束的话,可以使用WaitForSingleObject
或WaitForMultipleObjects
函数等待。在子进程结束之前,父进程会一直被阻塞。
两个示例
下面是两个使用CreateProcess
的示例。
示例一:运行一个可执行文件
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
if (!CreateProcess(
"app.exe",
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
))
{
printf("CreateProcess failed (%d).\n", GetLastError());
return;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
这个示例中,CreateProcess
函数调用app.exe
应用程序,并等待它结束之后返回。注意,si
参数需要正确地初始化。
示例二:运行命令行
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
char cmdline[MAX_PATH];
sprintf(cmdline, "cmd.exe /c echo \"Hello World!\"");
if (!CreateProcess(
NULL,
cmdline,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
))
{
printf("CreateProcess failed (%d).\n", GetLastError());
return;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
这个示例中,CreateProcess
函数调用cmd.exe
程序,并调用echo "Hello World!"
命令。运行结束之后,程序返回。注意,参数cmdline
中需要正确地包含双引号引起来的字符串。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VC程序设计中CreateProcess用法注意事项 - Python技术站