为什么,创建新的进程总是失败???
我按照MSDN上给出的例子,在主函数中调用CreateProcess去创建一个新的进程,尝试了种种方法,但总是以失败而告终。在98 和 XP 下,结果是一样的。
源程序如下: (在VC6.0 下运行)
#include "windows.h"
#include "iostream.h"
void main(void)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
//这里的返回值总是为 0 !
if( !CreateProcess( NULL, // No module name (use command line).
"MyChildProcess", // 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.
)
{
cout<<"CreateProcess failed."<<endl;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
问题点数:100、回复次数:7Top
1 楼whoishere(我来也)回复于 2003-10-03 12:36:38 得分 20
MyChildProcess.exe这个应用程序存在吗?在当前目录下吗?
MSDN上的例子也不是这么直接抄过来用的啊?
好好理解一下参数的意义吧!Top
2 楼FAICHEN(CC)回复于 2003-10-03 12:57:10 得分 20
给个绝对路径Top
3 楼smch(Ashes Of Time)回复于 2003-10-03 13:20:10 得分 0
STARTUPINFO startupInfo;
memset(&startupInfo,0,sizeof(STARTUPINFO));
startupInfo.wShowWindow = SW_MINIMIZE;
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
PROCESS_INFORMATION processInformation;
BOOL bRetCode = CreateProcess(szFileName,NULL,NULL, NULL, false,NORMAL_PRIORITY_CLASS,NULL,NULL,&startupInfo,&processInformation);
if(!bRetCode)
{
CString strError = "无法启动....";
return false;
}Top
4 楼smch(Ashes Of Time)回复于 2003-10-03 13:20:31 得分 0
参考参考。Top
5 楼smch(Ashes Of Time)回复于 2003-10-03 13:21:32 得分 30
还有,以后提问题最好把错误的信息给出来。
而且你也应该自己跟踪一下GetLastError()的值分析原因,然后根据错误原因去找解决方法。Top
6 楼vcforever(累)回复于 2003-10-03 13:50:53 得分 30
看看你要创建的哪个MyChildProcess进程的存不存在!
如果不存在,CreateProcess的返回值就会是0!Top
7 楼TinyTing(婷婷)回复于 2003-10-03 19:56:16 得分 0
谢谢大家!我找到了原因:CreateProcess() 这个函数不能创建一个新的进程,它只是将一个现有的可执行文件载入了内存,为它创建进程。Top




