我按照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 );
}

解决方案 »

  1.   

    MyChildProcess.exe这个应用程序存在吗?在当前目录下吗?MSDN上的例子也不是这么直接抄过来用的啊?好好理解一下参数的意义吧!
      

  2.   

    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;
    }
      

  3.   

    还有,以后提问题最好把错误的信息给出来。
    而且你也应该自己跟踪一下GetLastError()的值分析原因,然后根据错误原因去找解决方法。
      

  4.   

    看看你要创建的哪个MyChildProcess进程的存不存在!
    如果不存在,CreateProcess的返回值就会是0!
      

  5.   

    谢谢大家!我找到了原因:CreateProcess() 这个函数不能创建一个新的进程,它只是将一个现有的可执行文件载入了内存,为它创建进程。